题
我想检查点的位置(素,py)在2D图在关系到一个线段(lx1、ly1)(lx2、ly2),使用逻辑的北南东西方向。逻辑我已经实现,是绘制一个垂直的线段,从这一点。
如果垂直是上线,这意味着其南部。
如果点在右侧意味着它的东部。
如果点左侧装置的西部。
如果垂直距离线前进方向将意味着北方。
如果垂直距离线向后方向的意思是南部。
我的问题是,这一逻辑上看起来很好文件,但其获得真的很难决定其是否NW,NE、软件或本身的情况。任何人都可以给我建议如何计算这一逻辑??我使用C++,但是算法中的任何语言将是一个很大的帮助。
我使用的终点线段计算出的南北东西的关系。
欢呼
解决方案
delta_x = x2 - x1
delta_y = y2 - y1
distance = sqrt (delta_x^2 + delta_y^2)
tan (theta) = delta_y / delta_x
theta = arctan (delta_y / delta_x)
;; 但是,不分通过零!- 乘
theta
通过180/PI
为获得程度
度是逆时针,从正面侧x轴。最终你会需要做少量的代数调整的程度,以便0起来(而不是权利)和运行顺时针方向。但在此之前:
一个问题是, arctan (1 / -1)
是一样的 arctan (-1 / 1)
. I.e。, 你会得到 -PI/4
弧度或-45度,为上留(需要180度偏)和较低的权利(确定)。你得做测试的标志 delta_y
与 delta_x
看看结果 arctan
需要进行调整。
之前 你代码解决方案,确保码测试,以确保功能的你是叫产生预期值。
其他提示
我同情 ndim
。计算从一点到另一点的方向很容易。我不明白哪个上下文需要你想要一条线的方向。这是一个地图应用程序吗?是否有一条公路,大约在路段的中途,你有一点点偏向一边?
什么是“北”的语义或“NE”或“NE”。或“东方”或线段实际上意味着不清楚。
像“北方”这样的方向或“东方”或或“NE”或“NE”。通常用于描述一个点相对于另一个(基点)的位置。您作为基点使用的线段上有什么意义?
编辑:现在您说要使用终点(x2,y2)
作为指南针的中心点,点(x ,y)
将通过检查增量矢量(x-x2,y-y2)
来相对于罗盘定位。
容易理由的方法在delta向量上使用 atan2()
,并考虑 atan2()
返回的角度。
但是,将 atan2()
的参数相互比较并确定从中得到的角度范围也是一个好主意。这基本上避免了在运行时调用 atan2()
,代价是你需要在编译时(或之前)进行一些计算。