Étant donné un rectangle et un point avec une direction vectorielle vers le rectangle. Comment puis-je trouver le point le plus proche à l'extérieur de ce rectangle du point en question?
mathematics
geometry
onedayitwillmake
la source
la source
Réponses:
Une technique que vous pourriez utiliser est appelée "lancer de rayon". Il est couramment utilisé pour le rendu de graphiques, mais a d'autres applications telles que la visibilité directe (comme vous voulez le faire) et la recherche de chemin. En général, cela fonctionne en trouvant l'intersection d'un rayon et d'un objet. Dans votre exemple, le rayon est le vecteur de la direction du personnage.
Une référence utile pour les intersections rayon / objet (et accessoirement d'autres intersections objet / objet) est www.realtimerendering.com/intersections.html (regardez sous les références pour ray / aabb et ray / obb).
la source
Le rectangle a quatre côtés. Chaque côté est un segment de ligne.
Testez chacun des quatre côtés pour l'intersection avec le rayon. Suivez le coup le plus proche.
Voici un code pour savoir où sur le segment le rayon frappe:
la source
Si votre boîte est alignée sur l'axe, il vous suffit de fixer chaque axe de coordonnées à la boîte si le point est en dehors de la boîte.
De RTCD pg 130:
Si vous faites cela pour les axes x, y, z, alors le
point
sera claqué sur le mur le plus proche de la boîte, s'il est en dehors de la boîte pour commencer. s'il est déjà à l'intérieur de la boîte, il sera laissé seul (où il se trouve).la source
Eh bien, vous pouvez utiliser uniquement l'algèbre linéaire (géométrie analytique, pour être plus précis) pour résoudre ce problème. Cela dépend de la façon dont vous avez modélisé le rectangle.
Voici un cas général: http://paulbourke.net/geometry/lineline2d/
la source