我正在尝试使用东南西方向的逻辑来检查2D图上与点线段(lx1,ly1)(lx2,ly2)相关的点(px,py)的位置。我实现的逻辑是从点开始在线段上绘制垂线。
如果垂直在线,意味着它的南方。
如果右侧的点表示其东部。
如果左侧的点意味着西方。
如果垂直方向偏离正向,则意味着北方。
如果垂直方向偏离后向方向则意味着南方。
我的问题是这种逻辑在纸面上看起来不错,但很难确定它是NW,NE,SW还是SE的情况。任何人都可以建议我如何计算这个逻辑?我使用的是C ++,但任何语言的算法都会有很大的帮助。
我使用线段的终点来计算东南西北关系。
干杯
答案 0 :(得分:1)
我同情ndim
。计算从一点到另一点的方向很容易。我不明白哪个上下文需要你想要一条线的方向。这是一个地图应用程序吗?是否有一条公路,大约在路段的中途,你有一点点偏向一边?
答案 1 :(得分:1)
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。,左上角(需要180度偏移)和右下角(按原样),你将获得-PI/4
弧度或-45度。您必须对delta_y
vs。 delta_x
的签名进行测试,看看是否需要调整arctan
的结果。
在编码解决方案之前,请务必对代码进行编码,以确保您调用的函数产生预期值。
答案 2 :(得分:0)
线段的“北”或“NE”或“东”实际意味着什么的语义不清楚。
“北”或“东”或“NE”等方向通常用于描述一个点相对于另一个(基点)的位置。您作为基点使用的线段上有什么意义?
编辑:既然您说要使用终点(x2,y2)
作为指南针的中心点,则点(x,y)
将相对于指南针定位通过检查增量矢量(x-x2,y-y2)
。
容易推理的方法在delta矢量上使用atan2()
,并考虑atan2()
返回的角度。
然而,将atan2()
的参数相互比较并确定由此产生的角度范围也可能是个好主意。这基本上避免了在运行时调用atan2()
,代价是需要在编译时(或之前)进行一些计算。