Autrement connu sous le nom d'arête vive, il s'agit d'une ligne que la souris ne peut pas traverser. Utile dans les jeux et autres.Implémentation d'un bord de délimitation de la souris
Actuellement, j'ai une fonction qui retourne si mon curseur de la souris est dans un polygone dessiné sur l'écran. Si ce n'est pas le cas, je déplace mon curseur sur le dernier point stocké dans le polygone.
if (!PointInPolygon(local, polyGon))
{
Cursor.Position = safePoint;
}
else
{
safePoint = Cursor.Position;
}
Je n'aime pas cela pour plusieurs raisons:
En raison de ralentir les temps de mise à jour ou pour une raison quelconque, je suis parfois en mesure de sortir de la boîte. Cela stocke alors cette position en tant que safePoint, en dehors du polygone. Ma souris est alors coincée dans cette position.
Les bords inclinés doivent former une croûte dans le sens de la pente. En poussant la souris à droite, un mur en forme de "/" devrait se terminer par le curseur dans le coin supérieur droit. Mais en raison de la nature de cette approche, aller au-dessus de la ligne va réinitialiser le curseur à l'endroit où il était auparavant. Continuer à pousser à droite ne fera que reprendre le curseur et ne le poussera pas "vers le haut de la pente".
Existe-t-il d'autres approches pour résoudre ce problème? Je suis surtout préoccupé par le dernier numéro: ce comportement transversal de pente est l'objectif principal de mon programme et je dois le faire fonctionner. Même si j'utilise cette méthode de base, des idées pour une optimisation de ce comportement spécifique?
EDIT:
Il a été suggéré par Reed que je retourne à la place au point que se rapproche le plus courant hors limites points. Étant donné les 4 coins d'un quadrilatère, comment trouver le point le plus proche dans/sur la forme?
Hmm, bonne idée. Maintenant, j'ai juste besoin de comprendre, étant donné les 4 points qui délimitent le quadrilatère, quel serait le meilleur moyen de trouver le point le plus proche? – cksubs
Voici quelques algorithmes pour vous: http://www.devmaster.net/forums/archive/index.php/t-103.html Avec de petits polygones (dépend de votre situation, mais généralement moins de 10 segments ou plus), juste force brute recherche point-> segments est souvent l'approche la plus rapide. –