# 3D Objekt entlang Geraden



## dnaxx (9. Jan 2008)

Hallo!
Habe folgende Situtation: es gibt eine Gerade, die durch zwei Punkte definiert ist. Jetzt möchte ich ein Objekt (z.B. Kegel) auf diese Gerade legen, so das die Gerade genau durch das Kegelzentrum geht.
Weiß jemand, wie man das Objekt zur Gerade ausrichten kann?

Grüße,


----------



## Marco13 (9. Jan 2008)

Ein Kugel "auszurichten" macht erstmal nicht viel Sinn. Wenn du zwei Punkte A und B hast, kannst du einen Beliebigen Punkt auf der Geraden AB ausrechnen, indem du
P = A + (B-A) * t
berechnest, mit einem t zwischen 0 und 1. Und wenn du so einen Punkt (Point3f) hast, kannst du den einfach als Translation einer Transformgroup verwenden, wo die Kugel dranhängt.


----------



## dnaxx (9. Jan 2008)

hoppla. Meinte z.B. einen Cone. Sonst wär's ja einfach .
Im Moment mache ich es so:
Point A,B; Dir. Vector AB
1.) Rotation für jede Achse berechnen:
rot_x = acos(dotProduct(AB,Vector(1,0,0)))
rot_y = acos(dotProduct(AB,Vector(0,1,0)))
rot_z = acos(dotProduct(AB,Vector(0,0,1)))

2.) Rotatieren
3.) z.B. nach A translatieren.

Das funktioniert nur leider nicht immer, da das Dotproduct nur einen Winkel zw. 0-180° ausgibt.


----------



## Marco13 (10. Jan 2008)

Hm. Wenn du dieses "Ausrichten" als eine Folge von Rotationen um x,y und z beschreiben willst, bekommst du wohl sowieso ein Problem. (Euler-Winkel, Singularität, Uneindeutigkeit ->  :autsch: ). Abgesehen davon wird es schwierig, die Rotationsrichtung zu bestimmen (da müßte man vmtl. viele eklige Abfragen einbauen...)

Vielleicht wäre es so einfacher:
roationsachse = linenRichtung CROSS zylinderRichtung
winkel = linenRichtung ANGLETO zylinderRichtung
AxisAngle4f axisAngle = new AxisAngle4f(rotationsAchse, winkel);
transformMatrix.set(axisAngle);


----------



## dnaxx (10. Jan 2008)

Danke. Mit dem AxisAngle geht es perfekt (wusste nicht, dass es sowas in Java3D gibt).


----------

