Bonjour, je sais que le titre n'évoque pas grand chose mais voila, ce que je cherche a connaitre, c'est "l'inclinaison" entre deux points. Par exemple je me place dans un espace 3D (X,Y,Z), Y étant la hauteur (peu importe). Si on a deux points A(0,0,0) et B(1,1,1) l'inclinaison en X et Z entre les deux points est bien 90°. Bon là c'est facile mais c'est plus difficile avec des valeurs décimales, et je ne connais pas la formule (je connais la fonction atan2 mais je ne vois pas comment l'utiliser là ).
En 3D, on peut dire qu'il y a deux angles, celui entre x et z et celui entre x et y pour ton cas où y est la hauteur mais ce n'est pas un problème, cela revient au même.
On appellera le premier theta et le deuxième phi.
Pour les calculer, on considère le rayon r, l'angle entre x et z theta et l'angle entre x et y phi.
Tu peux t'inspirer de cette fonction pour coder ta fonction (attention, il faut savoir que cette fonction est faites pour que z soit la hauteur)
void angle_deux_points (Pos A, Pos B, float &theta, float &phi)
{
Pos difference;
difference.x = B.x - A.x;
difference.y = B.y - A.y;
difference.z = B.z - A.z;
// Tu rendras les différences toutes plus que 0 car les distances sont > 0
float r = ; // Tu la calculeras toi même
float phi = asin( (difference.z) / r );
float teta = to_degre( asin( difference.x / (r * get_cos_rad(phi) ) ) ); // to_degre, tu coderas cette fonction, c'est facile : elle retourne le int que tu lui as passé en effectuant / M_PI * 180
// Tu coderas aussi get_cos_rad() qui prend le cos d'un radium
teta = v.y < 0 ? 180+teta : -teta;
phi = to_degre(phi);
r est la distance entre les deux points, ne me dis pas que tu ne sais pas calculer cela sinon tu peux faire une rechercher sur internet ou créer la formule toi même en utilisant pythagore.
En 3D, on peut dire qu'il y a deux angles, celui entre x et z et celui entre x et y pour ton cas où y est la hauteur mais ce n'est pas un problème, cela revient au même.
On appellera le premier theta et le deuxième phi.
Si tu as 3 points (ou 2 vecteurs) dans un espaces à 2 ou 3 dimensions (surment N dimensions même), il y a un seul angles, pas 2 (du moins pas usuellement).
D'où la question, sur quel axe tu projettes le point? Parce que au final c'est cet axe qui détermine l'angle. "Le même axe" tu dis. A part faire de la télépathie, ça va être difficile pour nous de déterminer lequel vu qu'ils se ressemblent tous (un peu).
@adimux: Really ? un angle entre deux points? Tu parles de coordonnées sphériques? Ca n'a pas nécessairement quelque chose à voir avec le problème à moins que celui-ci se précise.
Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
Oui c'est vrai, mais l'auteur parlait au début de deux points pas de deux vecteurs .
Quand je vois écrit A(x,y,z), B(x,y,z) dans un espaces à 3D et un angles entre les deux, je vois ca comme des vecteurs, sinon ca n'a aucun sens.
Pour la réponse : angle = acos(<a|b>/(|AB|*|AC|)) ou <|> est le produit sacalaire usuel sur R^3 et | | la norme associé, ce qui donne (en cartésien) angle = acos((x1*x2+y1*y2+z1*z2)/(sqrt(x1²+y1²+z1²)*sqrt(x2²+y2²+z2²)))
NB: Ce que j'ai écrit n'est pas mathématique parfait, mais devrait suffire.
En 3D, on peut dire qu'il y a deux angles, celui entre x et z et celui entre x et y pour ton cas où y est la hauteur mais ce n'est pas un problème, cela revient au même.
On appellera le premier theta et le deuxième phi.
Si tu as 3 points (ou 2 vecteurs) dans un espaces à 2 ou 3 dimensions (surment N dimensions même), il y a un seul angles, pas 2 (du moins pas usuellement).
Oui, j'ai posté un autre topic ( [Irrlicht] Inclinaison d'un terrain) ou en gros je cherchais comment connaitre l'angle formé par l'inclinaison d'une pente. Donc dans ce cas le 3ème point n'est pas visible
Bon c'est super embêtant car du coup mon sujet est HS... Savez vous si il y a un moyen d'enlever ce sujet ou de changer son titre ? Ce que je veux savoir et je pense vous l'avez clairement compris, c'est l'angle entre deux vecteurs (vecteur avec une approche géométrique et non algébrique bien sur) dans un espace en 3D
(vecteur avec une approche géométrique et non algébrique bien sur)
Approche totalement relié et je t'ai donné la formule (et Fvirtman aussi), d'après ton dessin tu te places par rapport au point A, c'est donc les vecteur AA' et AB.
Je vois 2 points ou bien un vecteur contenu dans un plan parallèle au plan Ozx. Difficile encore une fois de dire si oui ou non c'est valide sans plus d'information.
Si le vecteur AB est contenu dans un plan Ozx et si l'on souhaites calculer l'angle entre ce vecteur et le plan Oxy, alors oui c'est juste. Bref encore une fois, si on savait exactement ce que tu cherchais à faire ça serait plus simple de te donner directement LA bonne solution.
Citation
D'un point de vue optimisation maintenant, sa ne serait pas mieux de calculer la norme du vecteur AB et d'utiliser atan2 (arctangente) ?
Tu ne calcules pas de norme ici et on n'a pas besoin de norme pour utiliser atan.
Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
Je vois 2 points ou bien un vecteur contenu dans un plan parallèle au plan Ozx. Difficile encore une fois de dire si oui ou non c'est valide sans plus d'information.
Si le vecteur AB est contenu dans un plan Ozx et si l'on souhaites calculer l'angle entre ce vecteur et le plan Oxy, alors oui c'est juste. Bref encore une fois, si on savait exactement ce que tu cherchais à faire ça serait plus simple de te donner directement LA bonne solution.
C'est à peu près ça !
Premier point de vue : j'ai deux points OU un vecteur dans un plan 2D, je cherche l'angle entre ce vecteur et l'axe 0x.
Deuxième point de vue : j'ai trois points (un appartenant à l'axe 0x) OU deux vecteurs et l'un des deux EST l'axe 0x.
Citation : iNaKoll
Citation
D'un point de vue optimisation maintenant, sa ne serait pas mieux de calculer la norme du vecteur AB et d'utiliser atan2 (arctangente) ?
Tu ne calcules pas de norme ici et on n'a pas besoin de norme pour utiliser atan.
[Maths/Espace 3D] Calculer l'angle entre 2 vecteurs
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html