java - 测试点是否在二维空间的线范围内

标签 java algorithm math geometry

这个问题有点难以表述,所以我将从展示这张图片开始:

enter image description here

我想测试点(例如图像上的 p1 和 p2)是否在垂直于直线极限的虚线内。我知道要测试的点的坐标和线的限制。

所以对于 p1 来说它是假的,而对于 p2 来说它是真的。

计算这个的最有效的计算方法是什么?

我在 Java 中使用 float 。

最佳答案

这可以通过点积非常有效地完成:

enter image description here

如果A,这是积极的有一个组件平行B , 如果反平行则为

因此,如果您有一条由点定义的线段 AB , 和一个测试点 P ,你只需要两个点积操作来测试:

dot(A - B, P - B) >= 0 && dot(B - A, P - A) >= 0


编辑:图形解释:

enter image description here

点积可以表示为:

enter image description here

因此如果θ > 90然后dot(A, B) < 0 ,反之亦然。现在解决您的问题:

enter image description here

在情况 1 中,当 dot(A - B, P - B) > 0我们说 PB 的虚线的正确一侧,在情况 2 中反之亦然。通过对称性,我们可以在 A 处执行相同的操作。 , 通过交换 AB .

关于java - 测试点是否在二维空间的线范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45780542/

相关文章:

java -++i 和 i = 1 在递归函数中的区别

java - 如何编写按年计算复利的方法?

python - 在数组/序列中找到等于总和的最短组合

python - 积分计算程序错误

math - 等距点的三次插值

Python 将对象值转换为 int

java - 当未选中可调整大小时,Netbeans null 布局会导致背景周围出现边框

java - 使用第三方jar在命令行中执行jar文件

java - 在斐波那契搜索算法方面需要帮助

algorithm - 重叠间隔子集的最大数量