二维数学地理方向

时间:2009-11-29 00:56:02

标签: math 2d

我正在尝试使用东南西方向的逻辑来检查2D图上与点线段(lx1,ly1)(lx2,ly2)相关的点(px,py)的位置。我实现的逻辑是从点开始在线段上绘制垂线。

如果垂直在线,意味着它的南方。

如果右侧的点表示其东部。

如果左侧的点意味着西方。

如果垂直方向偏离正向,则意味着北方。

如果垂直方向偏离后向方向则意味着南方。

我的问题是这种逻辑在纸面上看起来不错,但很难确定它是NW,NE,SW还是SE的情况。任何人都可以建议我如何计算这个逻辑?我使用的是C ++,但任何语言的算法都会有很大的帮助。

我使用线段的终点来计算东南西北关系。

干杯

3 个答案:

答案 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(),代价是需要在编译时(或之前)进行一些计算。