2016-07-07 32 views
0

Angenommen, ich habe eine Betrachtungsebene vn, mit einer Ausrichtung q1 und ein Flugzeug in der Szene un mit einer Ausrichtung q2.Wie berechnet man die inverse orthogonale Projektion eines Punktes in der Betrachtungsebene auf eine Ebene in der Szene?

q1 und q2 sind Quaternionen. Wie würde ich den unbekannten Punkt ux, uy, uz finden, so dass proj_u_plane_vn gleich einem bekannten Punkt vx, vy, 0 ist?

Wäre das Problem einfacher durch das Finden der relativen Orientierung q2-q1?

Im Moment versuche ich es mit i, j und k Werten zu tun, aber es scheint wie Overkill und ich sehe nicht die Antwort herauskommen ohne inverse trig zu machen, nicht das würde mir etwas ausmachen, aber ich Ich suche eine elegantere Lösung.

Vielen Dank im Voraus. :)

+0

Hinweis: Ich denke, die richtige Antwort wäre 'u = (q1 * q2^-1) * v 'wo ux, uy sind der Punkt in' un' und uz ist die Entfernung von vx, vy, 0 bis ux , uy, 0. Ich muss das noch überprüfen, bitte korrigiert mich, wenn ich falsch liege! – Nolo

Antwort

1

Sie haben folgende Werte:

vx, vy, vz; //These are the points in the viewing plane, which you know. 
q1, q2;  //The vectors describing the viewing and scene planes. 

Wie Sie der Trick, um Projektion zwischen den Ebenen vermutet wird, ist die relative Orientierung bei der Verwendung.

Sie sollten Ihre Offsets (wenn Sie die relativen Orientierungen finden) zwischen Ebenen verwenden, um die Szenenebene so zu behandeln, als ob sie von der vorderen Ebene (der Betrachtungsebene) versetzt wäre. Dies ist nicht nur einfacher zu visualisieren, sondern macht auch die Antworten, die Sie nachgeschlagen haben, relevanter.

Mit diesem Wissen können Sie Ihre relative Orientierung verwenden n in der folgenden Gleichung definiert werden:

q_proj = q - dot(q - p, n) * n 

die Projektion eines Punkts Q = (x, y, z) auf eine Ebene durch einen Punkt p gegebene = (a, b, c) und eine Normale n = (d, e, f).

Beachten Sie, dass diese Antwort von hier gerippt wurde: How do I find the orthogonal projection of a point onto a plane.

+0

Ja, das hatte ich nach einigem Nachdenken bemerkt. : D Meine Quaternion-Implementierung stellt eine Matrixdarstellung bereit, die bereits den z-Hut ('n') nach der Berechnung von' q1 (q2^-1) -> qt' enthält, dann rotiere ich einfach 'qt (p) -> p'' , löse 'nz * t - p'.z = 0 ', dann' q2 (p '+ (n) t) -> p' '', um die räumliche Koordinate dieses Punktes in der Ebene in der Szene zu erhalten. – Nolo