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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.