给出的是笛卡尔坐标系和该系统中的点(x,y)。例如,点p具有坐标(-12,2):
|
|
p |
|
------------------+------------------>
|
|
|
|
现在我需要一个函数/算法,根据给定的点,从坐标系的中心(0,0)计算相反的“方向”(北,东,南,西)。在我们的例子中,选择的最佳相反方向是EAST,沿着X轴向右移动。
但是,在我的应用程序中的某些情况下,并非所有方向都是可供选择的选项,在这种情况下,必须选择下一个最佳方向。在我们的例子中,如果EAST不可能,那么下一个最佳方向将是SOUTH(然后是NORTH,然后是WEST)。
我可以用一些if语句来解决这个问题,但这看起来并不是很优雅 还有其他(更好的)想法吗?
答案 0 :(得分:3)
使用向量(x, y)
的点积与沿四个方向的单位向量
(1, 0), (-1, 0), (0, 1), (0, -1).
最小的数字对应您想要的方向。然后是第二小,依此类推。
这适用于任何方向,不仅仅是E,W,S和N - 您只需要沿所需方向选择单位矢量并比较点积
答案 1 :(得分:2)
“真正的”相反方向是-P
,即(12,-2)
“最佳”方向是较长的幅度,即(12,0)。你将它标准化并得到(1,0)这是东方。
下一个最佳方向是较短的幅度,即(0,-2)。你将它标准化并得到(0,-1),这是南方。
一般情况下,如果您被限制使用某组单位向量,则使用具有最大点积的那个。