Calcul de distance entre des points normalement éloignés
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
archi876
- Messages: 4
- Enregistré le: 20 Aoû 2017, 18:04
-
par archi876 » 20 Aoû 2017, 18:26
Bonjour,
je voudrais faire un calculateur de distances mais je suis bloqué par mes mauvaises connaissances mathématiques.
Le jeu possède une un map de 801x801 cases.
Je sais que pour calculer la distance entre deux points, il faut utiliser :
sqrt((x1 - x2)² + (y1 - y2)²)
Jusque là tout va bien ^^
Cependant, je me suis rendu compte qu'il est possible de faire le tour de la map.
Par exemple, la distance entre (-399|399) et (399|-399) est la même que (0|0) et (3|-3).
Distance : 4.242640687119285 cases
Ma question est donc comment obtenir la bonne distance avec uniquement les coordonnées x et y des deux points
Merci d'avance pour votre aide !
-
MJoe
- Membre Relatif
- Messages: 295
- Enregistré le: 19 Juil 2017, 07:26
- Localisation: Saint-Nazaire
-
par MJoe » 20 Aoû 2017, 18:53
archi876 a écrit:Bonjour,
Cependant, je me suis rendu compte qu'il est possible de faire le tour de la map.
Par exemple, la distance entre (-399|399) et (399|-399) est la même que (0|0) et (3|-3).
Distance : 4.242640687119285 cases
Ma question est donc comment obtenir la bonne distance avec uniquement les coordonnées x et y des deux points
Merci d'avance pour votre aide !
Bonjour,
Je pense que vous avez défini une origine de votre repère.
Une fois cela fait, la formule que vous avez indiquée fonctionne.
Soient M1(X1 ; Y1) et M2(X2 ; Y2), la distance d vaut :
Application numérique :
M1(-399 ; 399) et M2(399 ; -399) alors :
M1(0 ; 0) et M2(3 ; -3) alors :
MJoe.
-
Razes
- Membre Rationnel
- Messages: 964
- Enregistré le: 28 Juil 2014, 20:24
-
par Razes » 20 Aoû 2017, 22:20
MJoe a écrit:Soient M1(X1 ; Y1) et M2(X2 ; Y2), la distance d vaut :
Application numérique :
M1(-399 ; 399) et M2(399 ; -399) alors :
M1(0 ; 0) et M2(3 ; -3) alors :
MJoe.
Bonjour,
Une petite erreur de calcul de
MJoe
-
archi876
- Messages: 4
- Enregistré le: 20 Aoû 2017, 18:04
-
par archi876 » 20 Aoû 2017, 22:50
Bonsoir,
merci pour vos réponses mais je me suis peut-être mal exprimé.
Ce que je n'arrive pas à trouver c'est la formule qui donne la distance entre (-399|399) et (399|-399) soit 4.24.
Car la formule : sqrt((x1 - x2)² + (y1 - y2)²) donne 1128.54
Merci encore pour votre aide je suis à votre disposition pour toute questions supplémentaire
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 20 Aoû 2017, 23:08
hello, je presume que -399 correspond a -399+801=402
dou le fait que lecart entre 0et 3 est le meme que entre 402 et 399 et dc la meme distance.
si la supposition est correcte tu as juste a convertir les nombres negatifs en positif.
idem pour un x donne: (x+801)%801 qui retourne x si positif ou la valeur correspondant a x si negatif.
la vie est une fête
-
Razes
- Membre Rationnel
- Messages: 964
- Enregistré le: 28 Juil 2014, 20:24
-
par Razes » 20 Aoû 2017, 23:18
Ne serait tu pas en train de parler des dimensions sur la map et dimensions réelles?
-
archi876
- Messages: 4
- Enregistré le: 20 Aoû 2017, 18:04
-
par archi876 » 21 Aoû 2017, 11:42
Bonjour,
La carte fait 801x801 cases.
Le centre est (0|0) et les cases les plus éloignés sont :
Au nord : (0|400)
Au sud : (0|-400)
A l'ouest : (-400|0)
A l'est : (400|0)
La case (-399|399) est située au Nord Ouest de la carte.
La case (399|-399) est située au Sud Est de la carte.
Cependant il est possible de passer directement du Nord Ouest au Sud Est sans passer par (0|0).
La formule sqrt((x1 - x2)² + (y1 - y2)²) est donc incorrect car je ne sais pas lui indiquer de limite ou redéfinir sont origine.
-
archi876
- Messages: 4
- Enregistré le: 20 Aoû 2017, 18:04
-
par archi876 » 21 Aoû 2017, 12:26
fatal_error => merci pour ta suggestion cela fonctionne effectivement avec les coordonnés (-399|399) et (399|-399) ! je n'ai pas fais tout les tests mais je vous tiens au courant
-
MJoe
- Membre Relatif
- Messages: 295
- Enregistré le: 19 Juil 2017, 07:26
- Localisation: Saint-Nazaire
-
par MJoe » 21 Aoû 2017, 18:21
Razes a écrit: MJoe a écrit:Soient M1(X1 ; Y1) et M2(X2 ; Y2), la distance d vaut :
Application numérique :
M1(-399 ; 399) et M2(399 ; -399) alors :
M1(0 ; 0) et M2(3 ; -3) alors :
MJoe.
Bonjour,
Une petite erreur de calcul de
MJoe
Oups ! Je ne sais même plus calculer une racine carrée !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 21 Aoû 2017, 21:14
@archi876
par rapport à ton post de 09:42
ma remarque ne marche pas si on considère
(-5;y) et (5;y) car -5 serait transformé en -5+801=796 alors que clairement la distance 796-5 est plus grande que 5--5
Tenant compte de ton post, on peut avoir l'approche suivante:
On peut regarder sur laxe des x et prendre la plus petite distance d_x correspondant à boucler ou traverser la map
Pareil sur l'axe des y
et enfin prendre pythagore avec d_finale = sqrt(d_x^2+d_y^2)
Soit A(x_A,y_A); B(x_B,y_B)
On se concentre sur l'axe des x
Tu connais la distance en traversant la map: via d=abs(x_A-x_B)
Tu peux en déduire la distance en sortant:
Tu places ton point fictif A' en (-400,y) et tu cherches le point B' qui respecte la distance d en comptant les carreaux en bouclant...
d'où x_B' = 1 + 800 - d
1 car tu comptes 1 pour boucler (sortie par la gauche et arrivée sur la droite)
800 parce que tu t'es mis tout à gauche, et que x_max = 800 ([-400;400])
La distance intéressante est donc min(d, 801-d)
On remarque trivialement que si d <= 400 alors vaut mieux traverser, sinon boucler...
du coup
abs_x = abs(x_A-x_B)
abs_y = abs(yA-y_B)
d = sqrt( min(abs_x, 801-abs_x)^2 + min(abs_y, 801-abs_y)^2)
la vie est une fête
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 79 invités