我正在尝试检查2D图形上的点(px,py)相对于线段(lx1,ly1) (lx2,ly2)的位置,使用的是东北、东南和西南方向的逻辑。我实现的逻辑是从点开始在线段上绘制一条垂线。
如果垂直线在线上,那就意味着它的南边。
如果右边的点意味着它的东边。
如果左边的点表示西边。
如果垂直方向远离直线,则正向将表示向北。
如果垂直方向远离直线,则向后方向表示向南。
我的问题是,这个逻辑在纸面上看起来很好,但真的很难决定它是NW,NE,SW还是SE情况。有人能建议我如何计算这个逻辑吗??我正在使用C++,但是算法在任何语言中都会有很大的帮助。
我正在使用线段的端点来计算北、南、东南、西的关系。
干杯
发布于 2009-11-29 17:23:10
delta_x = x2 - x1delta_y = y2 - y1distance = sqrt (delta_x^2 + delta_y^2)tan (theta) = delta_y / delta_x theta = arctan (delta_y / delta_x) ;;但不要除以zero!theta by 180/PI以获得学位度数从x轴的正侧逆时针方向旋转。最终,您将需要做少量的代数操作来重定向度数,以便0向上(而不是向右)并顺时针方向运行。但在此之前:
一个问题是arctan (1 / -1)和arctan (-1 / 1)是一样的。也就是说,对于左上角(需要180度偏移)和右下角(可以按原样),你会得到-PI/4弧度或-45度。您必须对delta_y和delta_x的符号进行测试,以查看arctan的结果是否需要调整。
在对解决方案进行编码之前,请确保还对测试进行了编码,以确保所调用的函数生成期望值。
发布于 2009-11-29 09:52:49
我很同情ndim。计算从一个点到另一个点的方向很容易。我不明白哪种上下文需要你想要一条线的方向。这是一个地图应用程序吗?有没有一条路,沿着一段路走到一半,你就会在边上找到一些点?
发布于 2009-11-29 09:09:04
线段的“北”或“北”或“东”的语义实际上是什么意思还不清楚。
像“北”、“东”或“东北”这样的方向通常用来描述一个点相对于另一个点(基点)的位置。用作该基点的直线段上的点是什么?
EDIT:既然您说要使用端点(x2,y2)作为指南针的中心点,那么将通过检查增量向量(x-x2,y-y2)来定位相对于指南针的点(x,y)。
易于推理的方法在增量向量上使用atan2(),并考虑atan2()返回的角度。
但是,将atan2()的参数相互比较并确定由此产生的角度范围也可能是一个好主意。这基本上避免了在运行时调用atan2(),代价是您需要在编译时(或编译前)进行一些计算。
https://stackoverflow.com/questions/1814302
复制相似问题