我想检查点的位置(素,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(),代价是你需要在编译时(或之前)进行一些计算。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top