stscolt
09.10.2009, 16:16
написал прогу, но что-то плохо вращает она. Вращает в 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,27 0,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.
Подскажите пожалуйста
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,27 0,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.