这个问题有点难以表述,所以我将从展示这张图片开始:
我想测试点(例如图像上的 p1 和 p2)是否在垂直于直线极限的虚线内。我知道要测试的点的坐标和线的限制。
所以对于 p1 来说它是假的,而对于 p2 来说它是真的。
计算这个的最有效的计算方法是什么?
我在 Java 中使用 float 。
最佳答案
这可以通过点积非常有效地完成:
如果A
,这是积极的有一个组件平行到B
, 如果反平行则为负。
因此,如果您有一条由点定义的线段 A
和 B
, 和一个测试点 P
,你只需要两个点积操作来测试:
dot(A - B, P - B) >= 0 && dot(B - A, P - A) >= 0
编辑:图形解释:
点积可以表示为:
因此如果θ > 90
然后dot(A, B) < 0
,反之亦然。现在解决您的问题:
在情况 1 中,当 dot(A - B, P - B) > 0
我们说 P
在 B
的虚线的正确一侧,在情况 2 中反之亦然。通过对称性,我们可以在 A
处执行相同的操作。 , 通过交换 A
和 B
.
关于java - 测试点是否在二维空间的线范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45780542/