[DirectX] distance point/axe

Le côté programmation du développement d'un jeu vidéo.

distance point/axe

Messagepar Kinju » 17 Déc 2005, 16:23

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 :)
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12

Messagepar grob1212 » 17 Déc 2005, 20:22

L'équation de projection :
http://membres.lycos.fr/emauvais/idm/GeoAPDisPoiDro.htm

Quand à la fonction D3DX, je n'en ai pas connaissance.
grob1212
Hello World, I'm new !
 
Messages: 277
Inscription: 13 Avr 2005, 15:12

Messagepar Kinju » 17 Déc 2005, 23:09

Merci Patrick, je test ça tout à l'heure ;)

A bientôt
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12

Messagepar Kinju » 18 Déc 2005, 01:25

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 :)
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12

Messagepar Comtois » 18 Déc 2005, 10:49

La distance d'un point p à un plan se calcule ainsi (Distance plan):
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²
Comtois
Hello World, I'm new !
 
Messages: 1258
Inscription: 20 Mar 2005, 13:00

Messagepar Kinju » 18 Déc 2005, 14:45

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.
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 32 invités

cron