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