2017-02-06 2 views
-1

Comme le montre l'image ci-dessous, étant donné les points O, A, B et α, comment obtenir la position du point P dans l'espace 3D?Comment calculer la position du point P dans l'espace 3D?

Merci d'avance! enter image description here

+1

Ceci est un problème de mathématiques, pas un problème de C++. – DeiDei

+0

Prendre le théorème de pythagoras, 'dist = sqrt ((x1 - x0)^2 + (y1 - y0)^2)' et ajouter un autre terme pour 'z' – user2896976

+0

@ user2896976 en fait, je dois calculer la position de P (x, y, z) pas le dist, le rayon du cercle est connu – XHLin

Répondre

1

vecteurs de Let

b = B - O 
a = A - O 
p = P - O 

Il semble que utilise de SLERP interpolation la façon la plus simple entre les vecteurs b et a. Dans un premier angle de trouver Omega entre les vecteurs b et un (par exemple, par produit scalaire), puis appliquez SLERP

p = Sin(Omega - Alpha) * b/Sin(Omega) + Sin(Alpha) * a/Sin(Omega) 

façon alternative - vous pouvez trouver vecteur de l'axe de rotation (perpendiculaire au plan de cercle) comme

k = b x a //vector product 
k = k.Normalized //unit vector 

puis utilisez Rodrigues' rotation formula pour obtenir p=P-O vecteur

+0

Merci pour votre réponse, je pense que le SLERP est ce dont j'ai besoin. BTW, dans mon cas, l'oméga est de 90 degrés, mais comment puis-je déterminer la relation de alpha, a et b. En d'autres termes, le p pourrait être "Sin (Omega - Alpha) * b/Sin (Omega) + Sin (Alpha) * a/Sin (Omega)" ou "Sin (Omega - Alpha) * a/Sin (Omega) + Sin (Alpha) * b/Sin (Omega) ". Ai-je raison? – XHLin

+0

Pour la rotation de b à a - la première variante (comme la mienne). La vérification est simple - pour alpha = 0 p sera égal à b, pour alpha = 90 p sera égal à a. – MBo

+0

C'est génial. Merci beaucoup. – XHLin