Board index » delphi » Wie [X,Y,Z] Vektor um Ebenenachsen rotieren lassen ?

Wie [X,Y,Z] Vektor um Ebenenachsen rotieren lassen ?

Hallo Mathefreaks,
hat jemand Kenntnis darber,wie sich ein 3-dimensionaler Vektor mit [X,Y,Z]
um die jeweiligen Achsen rotieren lassen l?sst ??
Es soll zur Erstellung eines Programmes dienen ,welches einen K?rper in
einem bestimmten Winkel rotiert  und den nach
den Berechnungen animiert..

 ciao, Jens

 

Re:Wie [X,Y,Z] Vektor um Ebenenachsen rotieren lassen ?


Quote
Ralf Abramowitsch wrote:

> Hallo Mathefreaks,
> hat jemand Kenntnis darber,wie sich ein 3-dimensionaler Vektor mit [X,Y,Z]
> um die jeweiligen Achsen rotieren lassen l?sst ??

The question was how to calculate the rotation of a body around the
three axis in space.

You are given a number of points [Xn, Yn, Zn], which define the body.
Then you can multiply the Vectors [Xn, Yn, Zn, 1] with a 4x4 matrix
calculated from the angles of rotation around the axes of space and the
translation along these axes.
Since the matrix needs to be calculated only once, this procedure is
relatively effective. I don't have the exact formulas handy, but any
textbook on computer graphics should provide these.

Re:Wie [X,Y,Z] Vektor um Ebenenachsen rotieren lassen ?


Ralf Abramowitsch schrieb
hat jemand Kenntnis darber,wie sich ein 3-dimensionaler Vektor mit
[X,Y,Z]

Hi,

{ Hier auf die Schnelle einige Proceduren yum rotieren von images, 2D
and 3D.}

Procedure Rotate(cent1, cent2 : Integer;     { zwei centroids Fuer
rotation }
                 angle : Real;               { Winkel in grad }
                 Var coord1, coord2 : Real); { beide coordinaten zu
rotieren }
Var
  coord1t, coord2t : Real;
begin
  {Setzt coordinaten Fuer temp system}
  coord1t := coord1 - cent1;
  coord2t := coord2 - cent2;

  {setzt neue rotierte coordinaten}
  coord1 := coord1t * cos(angle * pi / 180) - coord2t * sin(angle * pi
/ 180);
  coord2 := coord1t * sin(angle * pi / 180) + coord2t * cos(angle * pi
/ 180);

  {aendern der coordinaten aus temp system}
  coord1 := coord1 + cent1;
  coord2 := coord2 + cent2;
end;

Procedure Draw3d(x, y, z : Real; {coordinaten} a, b : Real;
{blickwinkel in grad}
                 Var newx, newy : Integer); {rueckgabecoordinaten als
Bildschirmcoords}
Var
  Xd, Yd, Zd : Real;
begin
  Xd := cos(a * pi / 180) * cos(b * pi / 180);
  Yd := cos(b * pi / 180) * sin(a * pi / 180);
  Zd := -sin(b * pi / 180);
  {Setzt coordinaten Fuer X/Y system}
  newx:= round(-z * Xd / Zd + x);
  newy:= round(-z * Yd / Zd + y);
end;

{
Die erste Procedur rotiert ein bitmap um eine der 2 Achsen
(X,Y...X,Z...Y,Z).

Die Zweite Procedur ist fuer 3D. Sie transformiert einen 3D-Punkt in
seine
korrespondierenden Punkte auf dem Bildschirm.
Am Besten probierst Du ein bisschen damit herum. Solltest Du nicht
klar
kommen, ich habe auch noch einige Sachen aus meinen aus meinen
Experimenten
da.
Damit es einigermassen schnell geht, muessen die Sinus- und
Cosinuswerte
vorher berechnet und in einem Array gespeichert werden. Die Procedur
muss dann
nat. entsprechend angepasst werden.

Quote
}

Ich hoffe das hilft Dir weiter.

mfg

Gerhard

--
MAILTO : ----------------------- Gerhard.Gros...@t-online.de
HOME   : ----------------------
http://home.t-online.de/home/Gerhard.Grosser/data1.htm
**************************FROHE OSTERN*******************************

Other Threads