ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

вращение с помощью матриц
  #1  
Старый 09.10.2009, 16:16
stscolt
Новичок
Регистрация: 08.10.2009
Сообщений: 2
Провел на форуме:
1400

Репутация: -1
По умолчанию вращение с помощью матриц

написал прогу, но что-то плохо вращает она. Вращает в TTimer.
Подскажите пожалуйста

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    XPManifest1: TXPManifest;
    BitBtn1: TBitBtn;
    Timer1: TTimer;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   dx:integer;
implementation

{$R *.dfm}
type
  vect=array[1..8,1..4] of real;
  vect2=array[1..12] of TPoint;
  matr=array[1..4,1..4] of real;
var
  a: vect=
  ((300,270,0,1),(300,200,0,1),(360,200,0,1),(360,270,0,1),
  (400,370,0,1),(400,300,0,1),(460,300,0,1),(460,370,0,1));
  paralld: vect2;
  i,j,k:integer;
  x,y,z,x2,y2,z2,fi:real;
  b:matr;
  v:vect;

procedure TForm1.FormPaint(Sender: TObject);
begin
    form1.Canvas.Pen.Color:=cllime;
    canvas.MoveTo(300,200);
    canvas.LineTo(300,3);
    canvas.TextOut(305,3,'Z');
    canvas.MoveTo(300,200);
    canvas.LineTo(500,200);
    canvas.TextOut(500,205,'Y');
    canvas.MoveTo(300,200);
    canvas.LineTo(150,350);
    canvas.TextOut(147,350,'X');
end;

procedure par(var a:vect);
begin
 form1.canvas.MoveTo(round(a[1,1]),round(a[1,2]));
 form1.canvas.LineTo(round(a[2,1]),round(a[2,2]));
 form1.canvas.MoveTo(round(a[2,1]),round(a[2,2]));
 form1.canvas.LineTo(round(a[3,1]),round(a[3,2]));
 form1.canvas.MoveTo(round(a[3,1]),round(a[3,2]));
 form1.canvas.LineTo(round(a[4,1]),round(a[4,2]));
 form1.canvas.MoveTo(round(a[4,1]),round(a[4,2]));
 form1.canvas.LineTo(round(a[1,1]),round(a[1,2]));
 form1.canvas.MoveTo(round(a[1,1]),round(a[1,2]));
 form1.canvas.LineTo(round(a[5,1]),round(a[5,2]));
 form1.canvas.MoveTo(round(a[2,1]),round(a[2,2]));
 form1.canvas.LineTo(round(a[6,1]),round(a[6,2]));
 form1.canvas.MoveTo(round(a[3,1]),round(a[3,2]));
 form1.canvas.LineTo(round(a[7,1]),round(a[7,2]));
 form1.canvas.MoveTo(round(a[4,1]),round(a[4,2]));
 form1.canvas.LineTo(round(a[8,1]),round(a[8,2]));
 form1.canvas.MoveTo(round(a[5,1]),round(a[5,2]));
 form1.canvas.LineTo(round(a[6,1]),round(a[6,2]));
 form1.canvas.MoveTo(round(a[6,1]),round(a[6,2]));
 form1.canvas.LineTo(round(a[7,1]),round(a[7,2]));
 form1.canvas.MoveTo(round(a[7,1]),round(a[7,2]));
 form1.canvas.LineTo(round(a[8,1]),round(a[8,2]));
 form1.canvas.MoveTo(round(a[8,1]),round(a[8,2]));
 form1.canvas.LineTo(round(a[5,1]),round(a[5,2]));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if radiobutton1.Checked=true then begin
  fi:=pi/24;
  b[1,1]:=1;b[1,2]:=0;b[1,3]:=0;b[1,4]:=0;
  b[2,1]:=0;b[2,2]:=cos(fi);b[2,3]:=sin(fi);b[2,4]:=0;
  b[3,1]:=0;b[3,2]:=-sin(fi);b[3,3]:=cos(fi);b[3,4]:=0;
  b[4,1]:=0;b[4,2]:=0;b[4,3]:=0;b[4,4]:=1;
  for i:=1 to 8 do
    for j:=1 to 4 do begin
      v[i,j]:=0;
      for k:=1 to 4 do
        v[i,j]:=v[i,j]+a[i,k]*b[k,j];
        a[i,j]:=v[i,j];
    end;
    form1.Refresh;
 par(a);
 end;
 if radiobutton2.Checked=true then begin
  fi:=pi/24;
  b[1,1]:=cos(fi);b[1,2]:=0;b[1,3]:=-sin(fi);b[1,4]:=0;
  b[2,1]:=0;b[2,2]:=1;b[2,3]:=0;b[2,4]:=0;
  b[3,1]:=sin(fi);b[3,2]:=0;b[3,3]:=cos(fi);b[3,4]:=0;
  b[4,1]:=0;b[4,2]:=0;b[4,3]:=0;b[4,4]:=1;
  for i:=1 to 8 do
    for j:=1 to 4 do begin
      v[i,j]:=0;
      for k:=1 to 4 do
        v[i,j]:=v[i,j]+a[i,k]*b[k,j];
      a[i,j]:=v[i,j];
    end;
  form1.Refresh;
 par(a);
 end;
 if radiobutton3.Checked=true then begin
  fi:=pi/24;
  b[1,1]:=cos(fi);b[1,2]:=sin(fi);b[1,3]:=0;b[1,4]:=0;
  b[2,1]:=-sin(fi);b[2,2]:=cos(fi);b[2,3]:=0;b[2,4]:=0;
  b[3,1]:=0;b[3,2]:=0;b[3,3]:=1;b[3,4]:=0;
  b[4,1]:=0;b[4,2]:=0;b[4,3]:=0;b[4,4]:=1;
  for i:=1 to 8 do
    for j:=1 to 4 do begin
      v[i,j]:=0;
      for k:=1 to 4 do
        v[i,j]:=v[i,j]+a[i,k]*b[k,j];
     a[i,j]:=v[i,j];
     end;
  form1.Refresh;
 par(a);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 //form1.Refresh;
 j:=1;
 par(a);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 j:=1;
 for i:=1 to 8 do begin
  a[i,1]:=a[i,1]-j;
  a[i,2]:=a[i,2];
  a[i,3]:=a[i,3];
 end;
 Form1.Refresh;
 par(a);
 j:=j+2;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 j:=1;
 for i:=1 to 8 do begin
  a[i,1]:=a[i,1];
  a[i,2]:=a[i,2]+j;
  a[i,3]:=a[i,3];
 end;
 Form1.Refresh;
 par(a);
 j:=j+2;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 j:=1;
 for i:=1 to 8 do begin
  a[i,1]:=a[i,1]+j;
  a[i,2]:=a[i,2]-j;
  a[i,3]:=a[i,3];
 end;
 Form1.Refresh;
 par(a);
 j:=j+2;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case key of
  '1':begin
  j:=1;
   for i:=1 to 8 do begin
    a[i,1]:=a[i,1]-j;
    a[i,2]:=a[i,2]+j;
    a[i,3]:=a[i,3];
   end;
   Form1.Refresh;
   par(a);
   j:=j+2;
   end;
  '2':begin
  j:=1;
   for i:=1 to 8 do begin
    a[i,1]:=a[i,1];
    a[i,2]:=a[i,2]+j;
    a[i,3]:=a[i,3];
   end;
   Form1.Refresh;
   par(a);
   j:=j+2;
   end;
  '3':begin
  j:=1;
   for i:=1 to 8 do begin
    a[i,1]:=a[i,1]+j;
    a[i,2]:=a[i,2]+j;
    a[i,3]:=a[i,3];
   end;
   Form1.Refresh;
   par(a);
   j:=j+2;
   end;
  '4':begin
  j:=1;
    for i:=1 to 8 do begin
     a[i,1]:=a[i,1]-j;
     a[i,2]:=a[i,2];
     a[i,3]:=a[i,3];
    end;
    Form1.Refresh;
    par(a);
    j:=j+2;
   end;
  '5':begin
  j:=1;
   for i:=1 to 8 do begin
     a[i,1]:=a[i,1];
     a[i,2]:=a[i,2];
     a[i,3]:=a[i,3];
    end;
    Form1.Refresh;
    par(a);
    j:=j+2;
   end;
  '6':begin
  j:=1;
   for i:=1 to 27 do begin
     a[i,1]:=a[i,1]+j;
     a[i,2]:=a[i,2];
     a[i,3]:=a[i,3];
    end;
    Form1.Refresh;
    par(a);
    j:=j+2;
  end;
  '7':begin
  j:=1;
   for i:=1 to 8 do begin
     a[i,1]:=a[i,1]-j;
     a[i,2]:=a[i,2]-j;
     a[i,3]:=a[i,3];
    end;
    Form1.Refresh;
    par(a);
    j:=j+2;
  end;
  '8':begin
  j:=1;
   for i:=1 to 8 do begin
    a[i,1]:=a[i,1];
    a[i,2]:=a[i,2]-j;
    a[i,3]:=a[i,3];
   end;
    Form1.Refresh;
    par(a);
    j:=j+2;
   end;
   '9':begin
   j:=1;
    for i:=1 to 8 do begin
     a[i,1]:=a[i,1]+j;
     a[i,2]:=a[i,2]-j;
     a[i,3]:=a[i,3];
    end;
    Form1.Refresh;
    par(a);
    j:=j+2;
   end;
end;  end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 form1.Close;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 timer1.Enabled:=true;
end;

end.

Последний раз редактировалось begin_end; 10.10.2009 в 01:13.. Причина: [code]
 
Ответить с цитированием

  #2  
Старый 09.10.2009, 16:51
stscolt
Новичок
Регистрация: 08.10.2009
Сообщений: 2
Провел на форуме:
1400

Репутация: -1
По умолчанию

че не понятно? в TTimer идет перемножение матриц. Так вот из-за этого должно происходить вращение, а оно не происходит. Почему???
 
Ответить с цитированием

  #3  
Старый 10.10.2009, 00:19
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

тс, если хочешь получить ответ - относись с уважением к публике. если тебе начхать на тех, кто может тебе помочь, то вполне резонно ожидать такое же отношение к тебе...
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Спасение утопающих: реанимация гаджетов с помощью риса fox_malder Мировые новости 13 12.08.2009 01:47
Cisco расширяет возможности совместной мобильной работы с помощью iPhone Кемит Блонски Мировые новости 0 13.01.2009 06:30
Настройка системы мониторинга интерфейсов сети с помощью netmond и rrdtool MicRO *nix 2 13.12.2006 21:38
Динамический <style> с помощью явыскрипта Trinux PHP, PERL, MySQL, JavaScript 1 28.02.2006 18:09



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ