home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / rotate.pas < prev    next >
Pascal/Delphi Source File  |  1979-12-31  |  2KB  |  62 lines

  1. (* ------------------------------------------------------------------------ *)
  2. (*                     Demonstration von MATRIX.INC                         *)
  3. (*                       Rotation eines Wuerfels                            *)
  4. (* ------------------------------------------------------------------------ *)
  5.  
  6. PROGRAM Rotate;
  7.  
  8. CONST MaxIndex = 8;
  9.  
  10. {$I MATRIX.INC}
  11.  
  12. VAR   R,
  13.       Data,
  14.       Cube  : Matrix;
  15.       n     : Vector;
  16.       Len,
  17.       Angle,
  18.       phi   : REAL;
  19.       i     : INTEGER;
  20.       Key   : CHAR;
  21.  
  22. BEGIN
  23.   ClrScr;                                            (* Bildschirm loeschen *)
  24.   WriteLn('Lese WUERFEL.MAT...');
  25.   ReadMat('wuerfel.mat', Data);
  26.   Write('Richtung der Drehachse (n[1],n[2],n[3]): ');
  27.   ReadLn(n[1],n[2],n[3]);
  28.   WriteLn;
  29.   Write('Drehwinkel in Grad: ');
  30.   ReadLn(phi);
  31.   phi := phi * pi/180;                                (* Grad --> Bogenmass *)
  32.   Len := Sqr(n[1]) + Sqr(n[2]) + Sqr (n[3]);     (* Normieren der Drehachse *)
  33.   IF Len <> 1 THEN
  34.     FOR i := 1 TO 3 DO
  35.       n[i] := n[i]/Sqrt(Len);
  36.   WITH R DO                                    (* Aufstellen der Drehmatrix *)
  37.   BEGIN
  38.     Rows := 3;
  39.     Columns := 3;
  40.     Coeff[1,1] := Cos(phi) + (1 - Cos(phi)) * n[1] * n[1];
  41.     Coeff[1,2] := -Sin(phi) * n[3] + (1 - Cos(phi)) * n[1] * n[2];
  42.     Coeff[1,3] := Sin(phi) * n[2] + (1 - Cos(phi)) * n[1] * n[3];
  43.     Coeff[2,1] := Sin(phi) * n[3] + (1 - Cos(phi)) * n[2] * n[1];
  44.     Coeff[2,2] := Cos(phi) + (1 - Cos(phi)) * n[2] * n[2];
  45.     Coeff[2,3] := -Sin(phi) * n[1] + (1 - Cos(phi)) * n[2] * n[3];
  46.     Coeff[3,1] := -Sin(phi) * n[2] + (1 - Cos(phi)) * n[3] * n[1];
  47.     Coeff[3,2] := Sin(phi) * n[1] + (1 - Cos(phi)) * n[3] * n[2];
  48.     Coeff[3,3] := Cos(phi) + (1 - Cos(phi)) * n[3] * n[3];
  49.   END;
  50.   Cube := Data;
  51.   Angle := 0;
  52.   REPEAT
  53.     WriteLn; WriteLn('Drehwinkel = ', Angle*180/pi :3:0, ' Grad');
  54.     WriteLn; WriteMat('CON:', Cube, 7, 2);
  55.     WriteLn;
  56.     MultMat(R, Cube, Cube);
  57.     Angle := Angle + phi;
  58.     Write('Abbruch mit <E>, sonst weitere Berechnung...');
  59.     ReadLn(key);
  60.   UNTIL Key IN ['E','e'];
  61. END.
  62.