|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 25 ![]() |
Bonjour,
je cherche à écrire une fonction qui prend en paramètre 3 points et qui renvoie true si le premier point est positionné entre les 2 autres. De la forme : bool isBetween(Point A, Point B, Point C); Sachant que Point est une Classe avec 3 attributs "double" : x, y et z. Et que les points peuvent êtres positionnés n'import où (C n'a pas forcement les x,y,z plus grands que B). Comment faire ? SVP. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() |
![]() Une première méthode serait d'établir les équations de la droite en 3D définie par deux points et voir si le troisième passe bien par elle (vérifier s'il est bien solution des deux équations). Maintenant, ce n'est pas forcément le plus facile à faire, ce n'est d'ailleurs pas facilement généralisable à plusieurs dimensions. Il pourrait être mieux de calculer le vecteur directeur de la droite formée par deux points (soit faire A - B) et de vérifier qu'il est bien colinéaire avec le vecteur directeur de la droite formée par deux points (A et C ou B et C, à nouveau calculer la différence de leurs coordonnées). En cas de colinéarité (le premier vecteur est proportionnel au second), les trois points seront alignés. (C'est équivalent à vérifier que les trois points ne forment pas un plan, au niveau des calculs par rapport à leur équivalent à la main naïf.) Le code s'en déduit assez aisément (si tu travailles avec des références, donc sans gestion explicite de pointeurs, ça peut se faire en une instruction, trois lignes en aérant), avec une complexité temporelle constante (donc optimale). |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 25 ![]() |
En faite je me suis mal expliqué.
Car je veux, en réalité, savoir si le point appartient au pavé, dont les arrêtes sont parallèles aux axes de l'origine, formé des 2 autres points (l'un à l'opposé de l'autre). Mais c'est pas plus claire là... En gros, dans mon programme, je fait un pavé de sélection et je doit vérifier si le point appartient à ce pavé. Ce pavé est définit par seulement 2 points car les arrêtes sont parallèles aux axes de l'origine. Comme ca :
|
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 25 ![]() |
J'ai fait cette fonction dans la classe Point, qu'en pensez-vous ?
Code :
|
||
|
|
00
|
|
|
#5 |
![]() ![]() |
Bonjour,
As-tu bien pensé au cas où A.x = B.x ou A.y = B.y ou A.z = B.z. (ou inclusif) ?
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 25 ![]() |
Oui c'est fait exprès : dans le cas où un (ou plusieurs) plan du pavé a une épaisseur nul je veux que la fonction agisse comme si il avait une épaisseur infinie.
|
|
|
00
|
|
|
#7 |
![]() ![]() |
Il faut le préciser en commentaire car ce n'est pas vraiment intuitif.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com