Choisissons un repère que nous arrange bien tel que :
A: (0, 0, 0)
B: (1, 0, 0)
C: (K, L, 0)
Nos trois étoiles sont dans le même plan X/Y et B est alignée sur X
Soit D: (x, y, z)
Si on connais AD, BD, CD (Les distances entre A et D, B et D, ...), D est a l'intersection de 3 sphères de centre A, B, C et de rayon AD, BD et CD. Donc:
x2 + y2 + z2 = AD2
(x-1)2 + y2 + z2 = BD2
(x-K)2 + (y-L)2 + z2 = CD2
On trouve facilement que x2 - (x-1)2 = AD2-BD2 => X = (AD2-BD2 + 1)/2
On peut "simplifier" les équations en :
- y2 + z2 = AD2 + x2 = M (par que ça simplifie les écritures)
- (y-L)2 + z2 = CD2 - (x-K)2 = N
Donc que y2 - (y-L)2 = M - N => y = (M - N + L2)/2L
Et donc que z2 = AD2 - x2 - y2.
Donc deux solutions pour z, ce qui est cohérent avec ce qu'on attendait (D est au dessus ou en dessous du plan)
Changement de repère.
"C'est bien gentil les intersections de trois sphères mais mes 3 étoiles connues, elles ont pas ces coordonnées" tu vas me dire.
Et je te répondrais: "On s'en fout, on applique une matrice de changement de repère pour être dans le repère qui nous intéresse (facilite la vie), on résout notre problème, et on applique la matrice inverse pour avoir notre solution dans notre repère d'origine."
Du coup la question, c'est "Mais qu'elle est cette matrice de changement de repère ?".
On va devoir la calculer (mais je vais pas le faire ici, j'ai pas vraiment le temps je t'avoue :)) mais en gros:
- C'est une matrice 4x4
- C'est la composition des transformations élémentaires suivante:
. Translation de -(Ax, Ay, Az) pour se "placer A en zéro"
. Rotation de l'angle ABX, avec pour axe la normale au plan ABX => ça va pivoter notre repère pour placer l'étoile B sur l'axe X
. Rotation de l'angle ACY, avec pour axe la normale au plan ACY (=X) => ça va pivoter notre repère pour placer l'étoile C sur le plan XY
. Un changement d'échelle de 1/AB pour placer B en coordonnée 1 sur X
Je te conseille fortement d'utiliser des lib de transformations matricielles dans ton langage favori, tu n'as probablement pas envie de réimplémenter tout ça.
# Intersection de sphères et changement de repère.
Posté par GaMa (site web personnel) . En réponse au message hauteur tétraèdre irrégulier et jeu spatial. Évalué à 6.
Intersection de 3 sphères.
On a donc 3 étoiles A, B, C.
Choisissons un repère que nous arrange bien tel que :
A: (0, 0, 0)
B: (1, 0, 0)
C: (K, L, 0)
Nos trois étoiles sont dans le même plan X/Y et B est alignée sur X
Soit D: (x, y, z)
Si on connais
AD,BD,CD(Les distances entre A et D, B et D, ...), D est a l'intersection de 3 sphères de centre A, B, C et de rayonAD,BDetCD. Donc:AD2BD2CD2On trouve facilement que x2 - (x-1)2 =
AD2-BD2 => X = (AD2-BD2 + 1)/2On peut "simplifier" les équations en :
- y2 + z2 =
AD2 + x2 = M (par que ça simplifie les écritures)- (y-L)2 + z2 =
CD2 - (x-K)2 = NDonc que y2 - (y-L)2 = M - N => y = (M - N + L2)/2L
Et donc que z2 =
AD2 - x2 - y2.Donc deux solutions pour z, ce qui est cohérent avec ce qu'on attendait (D est au dessus ou en dessous du plan)
Changement de repère.
"C'est bien gentil les intersections de trois sphères mais mes 3 étoiles connues, elles ont pas ces coordonnées" tu vas me dire.
Et je te répondrais: "On s'en fout, on applique une matrice de changement de repère pour être dans le repère qui nous intéresse (facilite la vie), on résout notre problème, et on applique la matrice inverse pour avoir notre solution dans notre repère d'origine."
Du coup la question, c'est "Mais qu'elle est cette matrice de changement de repère ?".
On va devoir la calculer (mais je vais pas le faire ici, j'ai pas vraiment le temps je t'avoue :)) mais en gros:
- C'est une matrice 4x4
- C'est la composition des transformations élémentaires suivante:
. Translation de -(Ax, Ay, Az) pour se "placer A en zéro"
. Rotation de l'angle ABX, avec pour axe la normale au plan ABX => ça va pivoter notre repère pour placer l'étoile B sur l'axe X
. Rotation de l'angle ACY, avec pour axe la normale au plan ACY (=X) => ça va pivoter notre repère pour placer l'étoile C sur le plan XY
. Un changement d'échelle de 1/AB pour placer B en coordonnée 1 sur X
Je te conseille fortement d'utiliser des lib de transformations matricielles dans ton langage favori, tu n'as probablement pas envie de réimplémenter tout ça.
Matthieu Gautier|irc:starmad