Bonsoir, je me demande si il existe un algorithme qui permet de vérifier si un point se situe dans un polygone, pour vérifier par exemple si l'utilisateur a cliqué dans ce polygone. C'est très facile à faire si c'est un rectangle dont les cotés sont parallèles aux bords de l'écran, mais si il s'agit d'une forme plus compliquée, je n'ai aucune idée de comment faire.
Je m'en remets donc à vos connaissances, merci d'avance
Tu peux vérifier si le point se situe "à la gauche" de chacun des cotés de la forme à l'aide de produits vectoriels, par exemple. Si la forme est convexe (qu'elle ne comporte pas de creux), ça fonctionne.
je n'ai pas fait assez de maths pour savoir ce que sont les produits vectoriels, aurais tu un lien vers un exemple ?
Ça tombe bien j'ai fait l'algo y a 3 jours
Regarde la lambda "pointInPolygon" à la ligne 752
https://github.com/Sygmei/ObEngine/blob/master/src/Collision/PolygonalCollider.cpp
Si t'as des questions hésite pas
Il faudrait preciser le domaine de validite de l'algo : polygones convexes uniquement, ou concaves egalement ? Etc.
Et tu n'as pas précisé si tu était en 3D ou en 2D.
Merci pour vos réponses,
mon problème concernait les polygones convexes et concaves en 2d uniquement.
Biolixe, je n'ai pas réussi à reproduire ta solution, mais j'ai fini par trouver ma propre méthode, voici mon script si ça vous intéresse, c'est du GDscript, le langage de Godot Engine (je précise que c'est juste pour tester, d'ou la définition de mon polygone écrite en dur comme variable membre) :
https://pastebin.com/iM0t0ZLj
Algo simple :
Si tu trace une demi droite à partir de ton point et que tu compte le nombre d'intersection entre cette demi droite et ton polygone, si le nombre est impair il est dedans sinon il est en dehors.
Tu prend une demi droite vertical pour simplifier le test de collision et t'obtiens le résultat facilement
oui, c'est plus ou moins ce que j'ai fait
et j'ai aussi amélioré mon code et géré des exceptions que je n'avais pas prévues, depuis mon précédent post