Comment comparer deux coordonnées ?

Dans un référenciel 3D

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour tout l’monde !

Je préfère prévenir tout de suite, pour éviter que ceux ayant une patience moyenne avec les néophytes ne s’arrachent les cheveux: je ne suis vraiment pas bon en mathématiques, et je comprends encore moins le vocabulaire ainsi que les symboles qui vont avec; j’enregistrerai avec plaisir les formules qui vous me donnerez, mais ne me tapez pas si je pose des questions "stupides". ^^'

Le disclaimer étant déjà assez long, place à la question !

Dans un référentiel 3D, comment puis-je comparer deux points entre eux ?

Par exemple, si une entité se "déplace" (dans ce référentiel) et que je souhaite déclencher un événement lorsque cette dernière atteint un point bien précis, il me faudra certainement comparer, à chaque update, les coordonnées auxquelles elle se trouve avec les coordonnées voulues. La seule solution (simple mais peut-être fausse) qui me vient en tête est de comparer la distance x, y, z avec la distance x, y, z du point attendu.

Qu’est-ce que vous en pensez ?

Merci d’avance pour vos réponses !

The most inflated egos are often the most fragile.

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut,

Je n’ai pas bien compris la question. Si ton entité atteint bien ce point et doit s’arrêter dessus, alors tu compares si les coordonnées de l’entité et celles du point sont les mêmes (donc tu as trois comparaisons à faire). Par contre, si ton entité ne s’arrête pas forcément dessus et qu’elle peut « passer par-dessus » ce point entre deux frames, il te faut effectivement autre chose. Une idée serait de regarder la distance euclidienne entre les deux

(x1x2)2+(y1y2)2+(z1z2)2.\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_1 - z_2)^2}.

Et s’il est suffisamment près (à toi de choisir à partir de quelle distance tu considères qu’ils sont suffisamment proches).

Une autre solution serait de regarder entre chaque frame si le point est sur la droite des deux positions p1p_1 et p2p_2 de l’entité avant et après. En particulier, ça permet de gérer les situations où l’entité s’approche beaucoup du point et finit par l’éviter/s’en éloigner/reculer. Si ton entité est un point, ça marchera bien. Sinon (disons qu’elle est représentée par le point de son centre), il est possible qu’une partie de l’entité passe sur le point sans que son centre ne passe dessus, et si tu veux que ce soit pris en compte il vaut alors mieux regarder par exemple la distance du point à la droite.

La solution à choisir va dépendre de la situation que tu veux gérer.

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

+4 -0
Auteur du sujet

Bonjour Karnaj,

Sans comprendre ma question, tu as quand même réussi à m’éclairer. :D

Bon, j’ai tenté de comprendre seul la définition de "distance euclidienne" ici mais j’suis un peu perdu. Pourrais-tu me dire à quoi correspond le résultat de cette formule, concrètement ? Au nombre de "points" entre les deux points qui nous intéressent ?

Sinon pour rendre ma question un peu moins farfelue: mes "entités" sont des vaisseaux qui seraient représentés par des points (un vaisseau = un point) sur une carte, elle-même évidemment représentée par une flopée de points, délimitant les déplacements possibles.

Les règles de déplacements des vaisseaux sont plutôt simples:

  • Les entités ne se déplacent jamais "entre" ou "au-dessus" d’un point; seuls deux états existent: "sur" le point ou "pas" sur le point;
  • Le vaisseau est représenté par un point (dont les coordonnées sont évidemment régulièrement mises à jour), et n’existe qu’à travers ce point;
  • Les vaisseaux disposent d’une zone de sécurité autour de leur point respectif pour éviter les collisions (du coup ton idée (@Karnaj) peut certainement être utilisée dans ce contexte, pour savoir si un vaisseau se trouve "près" d’un autre)

Sur la carte, on peut trouver:

  • Des champs d’astéroïdes (représentés par un ensemble de point dessinés en cercle, dont le rayon pourrait être variable) pouvant rendre les vaisseaux invisibles aux yeux de l’adversaire;
  • Des nébuleuses (elles aussi représentées par un ensemble de point dessinés en cercle, don le rayon pourrait être variable);

Ma plus grande lacune pour parvenir à faire ce que je veux, c’est la terrible méconnaissance des outils mathématiques que je suis censé utiliser pour me faciliter la tâche. Je ne demande absolument pas que l’on me jette les formules à la tête sans réflexion, donc n’hésitez pas à me renvoyer vers des ressources qui le feront à votre place. :)

Avec les mécaniques énoncées, y’en a peut-être dans le lot qui auront deviné qu’elles ressemblent beaucoup à celles présentes dans un jeu de la licence 40k, c’est voulu. Je souhaite créer un modeste simulateur pour mon plaisir. :D

The most inflated egos are often the most fragile.

+0 -0

La distance euclidienne correspond à la distance à vol d’oiseau, à la plus courte distance entre les deux points, c’est la longueur de la droite qui relie les deux points. En 2D, ça se voit bien que c’est la bonne formule (c’est Pythagore).

   A
   .
   |
 x |
   |
   +--------------. B
          y

La longueur de la droite qui relie AA et BB, c’est x2+y2\sqrt{x^2 + y^2}. Si l’on a que les coordonnées (xA,yA)(x_A, y_A) et (xB,yB)(x_B, y_B), on a que x=xAxBx = \left|x_A - x_B\right| et y=yAyBy = \left|y_A - y_B\right|. On retrouve la formule que j’ai donné plus haut en 2D (les valeurs absolues peuvent disparaître vu qu’on considère le carré),

(xAxB)2+(yAyB)2.\sqrt{(x_A - x_B)^2 + (y_A - y_B)^2}.

On fait la même chose en 3D (et en fait on peut généraliser à une dimension quelconque).

Les notions que tu devrais regarder sont celles de distance, de norme. Et potentiellement d’espaces vectoriels et de projections. Tu peux par exemple regarder des polys de licence ou de prépa.


En gros, la distance euclidienne correspond à la notion de plus courte distance en géométrie euclidienne, mais ce n’est pas la seule distance possible. Par exemple, la distance de Manhattan correspond en gros à ne pas autoriser d’aller en diagonale (se déplacer sur deux axes en même temps). La distance de Manhattan entre nos deux points AA et BB plus haut est x+yx + y.

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

+0 -0

Cette réponse a aidé l’auteur du sujet

Bon, j’ai tenté de comprendre seul la définition de "distance euclidienne" ici mais j’suis un peu perdu. Pourrais-tu me dire à quoi correspond le résultat de cette formule, concrètement ? Au nombre de "points" entre les deux points qui nous intéressent ?

Songbird

Dans un espace 3D « euclidien » ça correspond à la distance entre deux points. Tu as des notions de repère, d’abscisse, d’ordonnée, de côte ?

Le plus simple c’est d’abord de regarder ce que ça donne dans le plan (2D). Tu as deux points A et B de coordonnées (xA,yA)(x_A, y_A) et (xB,yB)(x_B, y_B). C’est à dire que dans le repère, pour arriver au point A depuis l’origine tu te déplaces de xAx_A sur l’axe des abscisses et yAy_A sur celui des ordonnées.

Points A et B
Points A et B

La distance entre deux points revient à calculer la longueur d’une diagonale de rectangle dont les extrémités seraient ces deux points.
C’est donc du Pythagore : calculer l’hypoténuse d’un triangle-rectangle.

Distance A à B
Distance A à B

Ainsi on a distance2=(xBxA)2+(yByA)²distance^2 = (x_B-x_A)^2 + (y_B-y_A)².

J’espère que ça répondra à toutes tes interrogations.

Édité par entwanne

Cette réponse a aidé l’auteur du sujet

Bon, j’ai tenté de comprendre seul la définition de "distance euclidienne" ici mais j’suis un peu perdu. Pourrais-tu me dire à quoi correspond le résultat de cette formule, concrètement ? Au nombre de "points" entre les deux points qui nous intéressent ?

Sans maths : la distance euclidienne est la distance usuelle. Ça peut paraitre étonnant de dire qu’il y a plusieurs manières de calculer la distance, mais même dans la vie courante, ça se fait. La distance en suivant la route et le distance à vol d’oiseau, par exemple.

Pour prendre un exemple plus proche des maths, dans un jeu vidéo, si tu as un quadrillage, la distance, c’est le nombre de cases. Deux cases en haut, ou deux cases en diagonal, c’est une distance de 2. Pourtant, si tu mesures avec une règle, la distance à la règle ( = euclidienne) est plus grande pour la diagonale que pour la verticale. Et ça, on peut le définir mathématiquement de manière très rigoureuse.

Pour la distance euclidienne, on la retrouve très concrètement et très simplement avec la formule de Pythagore. C’est tout. :P À 2D, ça se fait sans problème ; à 3D, il faut un peu plus de vue de l’espace, mais on trouve bien le résultat donné par @Karnaj.

Bon, j’ai pas bien compris ton problème, mais je pense que je complète quand même la réponse de @Karnaj.

Tu peux regarder la page Wikipédia sur les distances. Après la définition mathématique, il y a des exemples compréhensibles.


Édit : double grillé.

Il y a bien des façons de passer à l’acte. Se taire en est une. Attribué à Jean-Bertrand Pontalis

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte