【问题标题】:How to tell whether a point is more to the right of a segment?如何判断一个点是否更靠近段的右侧?
【发布时间】:2021-08-26 17:16:08
【问题描述】:

如何判断 AB 右侧的第一段是什么? 所以我们从 A 开始步行,到达 B,然后我需要走最右边 - 到 C。 但是我如何在数学上找到这个? 请记住,在任何方向上都可能有来自 B 的更多段。 (其中一些或全部可能在 B 的左侧 - 在我的图像中 C 和 D 在右侧)

我们确实有所有顶点坐标 - x 和 y!

我想

  • 找出 C 和 D 是在通过 AB 的线的右侧还是左侧,
  • 如果两者都在右侧,请画一条从 C 到 AB 的垂线和一条从 D 到 AB 的垂线 从 A 到垂线最短的距离就是赢家?

【问题讨论】:

  • 请注意,在我链接的问题中,该问题仅询问给定点是在右侧还是左侧;但是答案提供了将点的“左右”作为+1和-1之间的数字的代码;您应该选择一个带有您想要的符号的点(右为负,左为正),并且最接近零。
  • 另外请注意,如果您从 A 的角度或 B 的角度来看,您可能会得到不同的结果。
  • @Stef 谢谢我想知道这对我有什么帮助。我将不得不在编码中实现它并提供一些场景,看看它是如何工作的。我会告诉你的!
  • 所以你需要最小的角度? (角度 ABC

标签: math geometry


【解决方案1】:

对于其他每个点,您都有坐标 AX、AY、BX、BY 和 PX、PY。

需要计算所有点P[i]中向量P-BA-B之间的最小夹角

abx = AX - BX
aby = AY - BY  //calculate once

pbx = PX - BX
pby = PY - BY  //calculated for every point

angle = atan2(-pbx*aby+pby*abx, pbx*abx+pby*aby)
if angle < 0:
    angle += 2*Math.pi  //to make range 0..2*Pi

计算每个点的角度(在某些语言中使用函数atan2Math.atan2 以及向量的叉积和点积),然后选择最小值 - 它对应于“最右转”

Python code

【讨论】:

  • 谢谢。我会为它写一些代码并尝试一下。我现在看到的另一种方式是 - 我可以绘制三角形并从三角形中找到角度。知道哪种方法更有效/更快吗?
  • 对于三角形,无论如何都必须使用三角函数,而使用 atan2 的方法更有效。我添加了工作 Python 代码的链接。请注意,我在 atan 括号内更改了符号。
  • 谢谢。我在 PHP 中需要它,但我认为它们应该是相似的。非常感谢!
  • 还有一个问题请 - 左边的第一段是该算法返回最大数字的段?看起来像,但只是为了确定..
  • 是的。角度范围为 0 到 2Pi。角度 0..Pi 对应右转,角度 Pi..2Pi - 左转,最左边的值较大
猜你喜欢
  • 2010-12-06
  • 2014-06-15
  • 2012-02-13
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2010-11-22
相关资源
最近更新 更多