OVH Cloud OVH Cloud

ALgorithme de localisation / pointage

1 réponse
Avatar
Wamli
Bonjour,

Je dois faire un algorithme qui détecte si le curseur "passe" sur une
ligne...

J'ai plusieurs lignes tracées dans une interface graphique (de longueur et
de pente quelconque) et j'aimerais qu'elles "s'illuminent" quand le curseur
passe dessus.

Dans le cas d'une ligne horizontale allant, par exemple, du point (100,100)
au point (200,100), c'est facile, il suffit de tester si ( souris.coordY =
100 ET souris.coordX >= 100 ET souris.coordX <= 200)

Mais dans le cas d'une ligne un peu plus tordue, genre (30,70) -->
(230,130)...., le test devient beaucoup plus compliqué...

j'ai pensé à appliquer à la ligne sur laquelle on veut appliquer le test ET
aux coordonnées de la souris une rotation de manière à supprimer la pente de
la ligne et donc de pouvoir réaliser le test dans un environnement "plat".
Est-ce la bonne manière de faire ? Y'a-t-il d'autre méthodes ?

1 réponse

Avatar
bof
Wamli wrote:
Bonjour,

Je dois faire un algorithme qui détecte si le curseur "passe" sur une
ligne...

J'ai plusieurs lignes tracées dans une interface graphique (de longueur et
de pente quelconque) et j'aimerais qu'elles "s'illuminent" quand le curseur
passe dessus.

Dans le cas d'une ligne horizontale allant, par exemple, du point (100,100)
au point (200,100), c'est facile, il suffit de tester si ( souris.coordY =
100 ET souris.coordX >= 100 ET souris.coordX <= 200)

Mais dans le cas d'une ligne un peu plus tordue, genre (30,70) -->
(230,130)...., le test devient beaucoup plus compliqué...

j'ai pensé à appliquer à la ligne sur laquelle on veut appliquer le test ET
aux coordonnées de la souris une rotation de manière à supprimer la pente de
la ligne et donc de pouvoir réaliser le test dans un environnement "plat".
Est-ce la bonne manière de faire ? Y'a-t-il d'autre méthodes ?


Une methode qui marche pas mal, c'est de calculer la distance du
pointeur a la ligne. Si on est en dessous d'un certain seuil (1 a qqs
pixels), on peut dire qu'on est dessus. Ca se fait assez rapidement avec
un produit vectoriel. Il faut ensuite tester que l'on est entre les 2
points du segment (avec un produit scalaire par exemple).

Pour optimiser, on peut reduire le nb de distances a calculer. Une
methode basique est de definir un rectangle paralleles aux axes et
delimite par les coins superieur gauche et inferieur droit. Si on est
dedans, on teste la droite.