Bonjour,
Dans le cadre dun travail dans le domaine de lingénierie mécanique, jai voulu programmer un petit utilitaire de modélisation de courbe graphique.
Je rencontre un problème de logique pour linsertion dun point sur la courbe, je parle ici dune option qui insère un point à la courbe et non qui ajoute le prochain point.
Bref, jai un tableau des coordonnées où chaque point est lié au prochain point, soit xy[0] à xy[n] où on a xy[i][0] la coordonnée x et xy[i][1] la coordonnée y. Jaimerais faire en sorte quavec cette option, si on clique au point (p[0], p[1]), soit respectivement les coordonnées (x, y), on insère ce point à lendroit le plus logique entre deux points existants ou au tout début ou à la toute fin si cela semble plus logique. Ainsi, si on a les points 1, 2 et 3 et quon clique entre les points 1 et 2, le nouveau point inséré sera le point 2 tandis que les anciens points 2 et 3 deviennent les points 3 et 4.
Pour ce faire, jai pensé calculer pour chaque groupe de deux points successifs le point se situant au milieu de ces deux points et ensuite calculer la distance directe entre ce point milieu et le point à insérer. On insère le point à la position où la distance calculée est la plus courte. Par contre, cela ne gère pas le cas où la logique serait dinsérer le point au début ou à la fin de la courbe, les extrémités me posent problème.
De plus, il faudrait sûrement prévoir un ratio de distance entre les deux points analysés. Je mexplique : on a les points 1, 2 et 3 qui forment un L. La distance entre les points 1 et 2 est très grande tandis que la distance entre les points 2 et 3 est très petite. Même si la distance entre lendroit où on a cliqué et le point milieu des points 2 et 3 est légèrement plus petite que celle pour les points 1 et 2, il est plus probable que lendroit où lon veut insérer le point soit entre les points 1 et 2.
Cest difficile dêtre clair textuellement, jessayerai de vous faire des cas plus visuels avec des captures décran pour les cas dexception.
Proposez-moi vos idées et noubliez pas de me répondre dun point de vue de langage informatique,
Merci.