2016-07-07 3 views
0

Supposons que j'ai un plan d'observation vn, avec une orientation q1 et un plan sur la scène un avec une orientation q2.Comment calculer la projection orthogonale inverse d'un point dans le plan de visualisation sur un plan de la scène?

q1 et q2 sont des quaternions. Comment trouver le point inconnu ux, uy, uz tel que proj_u_plane_vn est égal à un point connu vx, vy, 0?

Le problème serait-il plus simple en trouvant l'orientation relative q2-q1?

En ce moment j'essaye de le faire avec les valeurs i, j et k, mais il semble que je devienne exagéré et je ne vois pas la réponse apparaître sans trig inverse, pas que cela me dérange, mais je Je cherche une solution plus élégante.

Merci d'avance. :)

+0

Note: Je pense que la réponse correcte serait 'u = (q1 * q2^-1) * v' où ux, uy sont le point dans' un' et uz est la distance de vx, vy, 0 à ux , uy, 0. Je dois encore vérifier cela, s'il vous plaît corrigez-moi si je me trompe! – Nolo

Répondre

1

Vous avez les valeurs suivantes:

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

Comme vous le soupçonnez, l'astuce à la projection entre les plans est en utilisant les orientations relatives. Vous devez utiliser vos décalages (lorsque vous trouvez les orientations relatives) entre les plans pour traiter le plan de la scène comme s'il était décalé par rapport au plan frontal (le plan de visualisation). Ce n'est pas seulement plus facile à visualiser, mais cela rendra également les réponses que vous avez trouvées plus pertinentes.

Sachant cela, vous pouvez utiliser votre orientation relative pour définir n dans l'équation suivante:

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

La projection d'un point Q = (x, y, z) sur un plan donné par un point p = (a, b, c) et une normale n = (d, e, f).

Notez que cette réponse a été extraite à partir d'ici: How do I find the orthogonal projection of a point onto a plane.

+0

Oui, je l'avais réalisé après y avoir réfléchi un peu. : D Mon implémentation de quaternion fournit une représentation matricielle qui contient déjà le z-hat ('n') après avoir calculé' q1 (q2^-1) -> qt', alors je fais simplement tourner 'qt (p) -> p'' , résolvez 'nz * t - p'.z = 0', puis' q2 (p '+ (n) t) -> p''' pour obtenir la coordonnée spatiale de ce point dans le plan de la scène. – Nolo