2011-09-08 87 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)。一般来说,如果你被限制沿着一组单位向量,你可以使用具有最大点积的那个向量。