PDA

Voir la version complète : distance point/axe


Kinju
17/12/2005, 15h23
Bonjour à tous,

J'ai un axe a de direction (x, y, z)
J'ai un point p de coordonnées (x', y', z')

Je voudrais connaître la distance minimale qui s'pare p et a.

En fait je voudrais connaitre la taille du segment perpendicualaire à a, passant par p.

Y'a une fonction directx qui le fait ça ou faut bidouiller?

Merci,

A bientôt :)

grob1212
17/12/2005, 19h22
L'équation de projection :
http://membres.lycos.fr/emauvais/idm/GeoAPDisPoiDro.htm

Quand à la fonction D3DX, je n'en ai pas connaissance.

Kinju
17/12/2005, 22h09
Merci Patrick, je test ça tout à l'heure ;)

A bientôt

Kinju
18/12/2005, 00h25
Je vois pas trop comment adapter la formule à mon vector(x, y, z)/point (x, y, z)...

M'enfin, j'ai essayé d'adopter à mon repère 3D (puisque la formule s'applique à un repère 2d), pour commencer, en testant avec la voiture à l'origine du repère global j'ai fait

d = ((axe.x * newWheels[i].x) + (axe.z * newWheels[i].z) + (axe.y * newWheels[i].y)) / sqrtf((axe.x * axe.x) + (axe.z * axe.z) + (axe.y * axe.y));

newWheels c'est les coordonnées de chacunes de mes roues recalculées depuis la dernière mise à jour des positions.

En fait, là, mon axe (1.0, 0.0, 0.0), j'obtient les résultats comme si l'axe était égale à (0.0f, 0.0f, 1.0f)...

Je vais continuer à chercher avec des dessins... j'apprends vite, mais y me faut des dessin à moi :p

Merci :)

Comtois
18/12/2005, 09h49
La distance d'un point p à un plan se calcule ainsi (Distance plan (http://homeomath.imingo.net/displan.htm)):
Distance = NormaleDuPlan.Point+Constante du plan (D=N.p+Cp)

tu as besoin d'un point d'origine sur ton axe de direction (x,y,z)
tu peux l'assimiler à un lancer de rayon ,si tu fais des recherches sur lancer de rayon tu vas trouver plein d'infos.

Pour définir un rayon , tu as besoin de connaitre son point d'origine et son vecteur directeur.

Admettons que ton point d'origine soit d0 avec ton vecteur directeur Vd(x,y,z) normé

Tu calcules la distance de la projection du point p sur le rayon à l'origine du rayon.
Dist=d0p.Vd avec d0p c'est le vecteur partant de d0 à p

Et ensuite tu appliques pythagore pour calculer la distance de ton point au rayon

D²=||d0p||²-Dist²

Kinju
18/12/2005, 13h45
Ben en fait voilà le problème:

J'ai une voiture sur un plan, et j'ai trouvé l'axe local à la voiture pour l'incliner et "coller au plan".

Maintenant, je cherche l'angle d'inclinaison sur cet axe.

Alors pour ça, j'ai les coordonnées du centre de la voitures, les coordonnées des 4 roues, les heuteurs de chaque roues etc...

Bref, pour savoir sur quelles roues on se base, il faut prendre les deux roues les plus éloignées de l'axe.

Une fois ça de fait, faut calculer l'angle, et c'est maintenant là que je bloque :'(

En fait pour la distance d'un point à une droite, y'a D3DXVec3Dot qui le fait, enfin j'pense que c'est ça.