2011-09-08 5 views
0

donné est un système de coordonnées cartésiennes et un point (x, y) dans ce système. Par exemple, un point p a les coordonnées (-12,2):Recherche de la direction opposée dans un système de coordonnées

    | 
        | 
     p   | 
        | 
------------------+------------------> 
        | 
        | 
        | 
        | 

Maintenant, je besoin d'une fonction/algorithme qui calcule la « direction » opposé (nord, est, sud, ouest) du centre du système de coordonnées (0,0) sur la base du point donné. Dans notre exemple, la meilleure direction opposée à choisir serait EAST, en suivant l'axe des X vers la droite.

Cependant, dans certaines situations dans mon application, toutes les directions ne sont pas une option à choisir, dans un tel cas, la prochaine meilleure direction doit être choisie. Dans notre exemple, si EAST ne serait pas possible, alors la prochaine meilleure direction serait SUD (puis NORD, puis OUEST).

Je pourrais résoudre cela avec quelques if-statements, mais cela ne semble pas très élégant.
D'autres (meilleures) idées?

Répondre

3

Utilisez le produit scalaire de votre vecteur (x, y) avec les vecteurs unitaires le long des quatre directions

(1, 0), (-1, 0), (0, 1), (0, -1). 

Le plus petit nombre correspond la direction souhaitée. Puis le deuxième plus petit, et ainsi de suite.

Cela fonctionne pour toutes les directions non seulement E, W, S et N - vous avez juste besoin de choisir des vecteurs unitaires le long des directions souhaitées et de comparer les produits de point

+0

fonctionne comme un charme, merci beaucoup! – Matthias

2

Le 'vrai' sens inverse est -P à-dire (12, -2)

La direction "meilleur" est la magnitude plus, à savoir (12,0). Vous normaliser et obtenir (1,0) qui est.

La meilleure direction suivante est la plus petite amplitude, c'est-à-dire (0, -2). Vous le normalisez et obtenez (0, -1) qui est sud.

En général, si vous êtes contraint de suivre un certain ensemble de vecteurs unitaires, vous utilisez celui avec le produit scalaire maximal.

Questions connexes