2011-09-08 26 views
0

給出的是笛卡爾座標系和該系統中的一個點(x,y)。例如,一個點P的座標爲(-12,2):在座標系中尋找相反方向

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

現在我需要一個函數/算法,從座標系統的中心計算出相反的「方向」(北,東,南,西) (0,0)基於給定的點。在我們的例子中,選擇最好的相反方向是EAST,沿着X軸向右。

但是,在我的應用程序中的某些情況下,並非所有方向都是可供選擇的選項,在這種情況下,必須選擇次最佳方向。在我們的例子中,如果EAST不可能,那麼下一個最好的方向將是SOUTH(然後是NORTH,然後是WEST)。

我可以用一些if語句解決這個問題,但是這看起來不是很優雅。
任何其他(更好)的想法?

回答

3

沿四個方向

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

最小的數字對應你想要的方向用你的矢量(x, y)的點積與單位向量。然後是第二小的,依此類推。

這適用於任何方向不只是E,W,S和N - 你只需要拿起沿着所需方向上的單位向量和比較點產品

+0

的作品就像一個魅力,非常感謝! – Matthias

2

'真' 相反的方向是-P即(12,-2)

「最佳」 方向爲長大小,即(12,0)。你將它歸一化並得到東(1,0)。

下一個最佳方向是較短的量值,即(0,-2)。你將它歸一化並得到南(0,-1)。一般來說,如果你被限制沿着一組單位向量,你可以使用具有最大點積的那個向量。