home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
rotate.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1979-12-31
|
2KB
|
62 lines
(* ------------------------------------------------------------------------ *)
(* Demonstration von MATRIX.INC *)
(* Rotation eines Wuerfels *)
(* ------------------------------------------------------------------------ *)
PROGRAM Rotate;
CONST MaxIndex = 8;
{$I MATRIX.INC}
VAR R,
Data,
Cube : Matrix;
n : Vector;
Len,
Angle,
phi : REAL;
i : INTEGER;
Key : CHAR;
BEGIN
ClrScr; (* Bildschirm loeschen *)
WriteLn('Lese WUERFEL.MAT...');
ReadMat('wuerfel.mat', Data);
Write('Richtung der Drehachse (n[1],n[2],n[3]): ');
ReadLn(n[1],n[2],n[3]);
WriteLn;
Write('Drehwinkel in Grad: ');
ReadLn(phi);
phi := phi * pi/180; (* Grad --> Bogenmass *)
Len := Sqr(n[1]) + Sqr(n[2]) + Sqr (n[3]); (* Normieren der Drehachse *)
IF Len <> 1 THEN
FOR i := 1 TO 3 DO
n[i] := n[i]/Sqrt(Len);
WITH R DO (* Aufstellen der Drehmatrix *)
BEGIN
Rows := 3;
Columns := 3;
Coeff[1,1] := Cos(phi) + (1 - Cos(phi)) * n[1] * n[1];
Coeff[1,2] := -Sin(phi) * n[3] + (1 - Cos(phi)) * n[1] * n[2];
Coeff[1,3] := Sin(phi) * n[2] + (1 - Cos(phi)) * n[1] * n[3];
Coeff[2,1] := Sin(phi) * n[3] + (1 - Cos(phi)) * n[2] * n[1];
Coeff[2,2] := Cos(phi) + (1 - Cos(phi)) * n[2] * n[2];
Coeff[2,3] := -Sin(phi) * n[1] + (1 - Cos(phi)) * n[2] * n[3];
Coeff[3,1] := -Sin(phi) * n[2] + (1 - Cos(phi)) * n[3] * n[1];
Coeff[3,2] := Sin(phi) * n[1] + (1 - Cos(phi)) * n[3] * n[2];
Coeff[3,3] := Cos(phi) + (1 - Cos(phi)) * n[3] * n[3];
END;
Cube := Data;
Angle := 0;
REPEAT
WriteLn; WriteLn('Drehwinkel = ', Angle*180/pi :3:0, ' Grad');
WriteLn; WriteMat('CON:', Cube, 7, 2);
WriteLn;
MultMat(R, Cube, Cube);
Angle := Angle + phi;
Write('Abbruch mit <E>, sonst weitere Berechnung...');
ReadLn(key);
UNTIL Key IN ['E','e'];
END.