home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------ *)
- (* 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.