unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure myOnShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TmyMatrix = class(TObject)
m11,m12,m13:REAL;
m21,m22,m23:REAL;
m31,m32,m33:REAL;
end;
type
TmyMatrixRot = class(TmyMatrix)
procedure mySetMatrixX(angle:REAL);
procedure mySetMatrixY(angle:REAL);
procedure mySetMatrixZ(angle:REAL);
end;
type
TmyPoint3 = class(TObject)
x,y,z:REAL;
function myMullMatrix(var b:TmyMatrixRot):TmyPoint3;
end;
var
Form1: TForm1;
pnt1,pnt2,pnt3,resPnt1:TmyPoint3;
rotMatrX:TmyMatrixRot;
implementation
{$R *.dfm}
//=============================================================================
procedure TmyMatrixRot.mySetMatrixX(angle:REAL);
Begin
self.m11:=1;self.m12:=0;self.m13:=0;
self.m21:=0;self.m22:=cos(angle);self.m23:=-sin(angle);
self.m31:=0;self.m32:=sin(angle);self.m33:=cos(angle);
End;
procedure TmyMatrixRot.mySetMatrixY(angle:REAL);
Begin
self.m11:=cos(angle);self.m12:=0;self.m13:=sin(angle);
self.m21:=0;self.m22:=1;self.m23:=0;
self.m31:=-sin(angle);self.m32:=0;self.m33:=cos(angle);
End;
procedure TmyMatrixRot.mySetMatrixZ(angle:REAL);
Begin
self.m11:=cos(angle);self.m12:=-sin(angle);self.m13:=0;
self.m21:=sin(angle);self.m22:=cos(angle);self.m23:=0;
self.m31:=0;self.m32:=0;self.m33:=1;
End;
{function myMatrixMull(a,b:myMatrixRot):myMatrixRot;
var r:myMatrixRot;
Begin
r.m11:=a.m11*b.m11+a.m12*b.m21+a.m13*b.m31;
r.m21:=a.m21*b.m11+a.m22*b.m21+a.m23*b.m31;
r.m31:=a.m31*b.m11+a.m32*b.m21+a.m33*b.m31;
r.m12:=a.m11*b.m12+a.m12*b.m22+a.m13*b.m32;
r.m22:=a.m21*b.m12+a.m22*b.m22+a.m23*b.m32;
r.m32:=a.m31*b.m12+a.m32*b.m22+a.m33*b.m32;
r.m13:=a.m11*b.m13+a.m12*b.m23+a.m13*b.m33;
r.m23:=a.m21*b.m13+a.m22*b.m23+a.m23*b.m33;
r.m33:=a.m31*b.m13+a.m32*b.m23+a.m33*b.m33;
myMatrixMull:=r;
End; }
function TmyPoint3.myMullMatrix(var b:TmyMatrixRot):TmyPoint3;
Begin
Result.x:=self.x*b.m11+self.y*b.m12+self.z*b.m13;
Result.y:=self.x*b.m21+self.y*b.m22+self.z*b.m23;
Result.z:=self.x*b.m31+self.y*b.m32+self.z*b.m33;
End;
//=============================================================================
procedure TForm1.myOnShow(Sender: TObject);
begin
pnt1:=TmyPoint3.Create;
pnt2:=TmyPoint3.Create;
pnt3:=TmyPoint3.Create;
resPnt1:=TmyPoint3.Create;
pnt1.x:= 30;pnt1.y:= 30;pnt1.z:= 30;
pnt2.x:=-30;pnt2.y:=-30;pnt2.z:=-30;
pnt3.x:=-30;pnt3.y:= 30;pnt3.z:=-30;
//resMatr :=myMatrixRot.Create;
rotMatrX:=TmyMatrixRot.Create;
rotMatrX.mySetMatrixX(30);
resPnt1:=pnt1.myMullMatrix(rotMatrX);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Image1.Canvas.Brush.Color:=RGB(0,0,0);
Form1.Image1.Canvas.Rectangle(0,0,320,320);
Form1.Image1.Canvas.Pixels[trunc(resPnt1.x+160),trunc(resPnt1.y+160)]:=rgb(200,0,0);
end;
end.Add a code snippet to your website: www.paste.org