我在 stackoverflow 上看到了很多讨论这个主题的帖子。我从stackoverflow上找到了解决方案,但找不到帖子。也就是说:如果两条线相交,则叉积会为左侧和右侧产生两个不同的结果。一正一负。否则两者具有相同的符号。到目前为止还可以。
使用的公式是,其中 AB 是一条线,CD 是另一条线。
左点积 = (B.x-A.x)(C.y-B.y)-(B.y-A.y)(C.x-B.x)
点积权 = (B.x-A.x)(D.y-B.y)-(B.y-A.y)(D.x-B.x)
如果我为以下给定的 GPS 坐标计算此值,则在不可能存在交叉点的情况下,我会得到一个交叉点。
答:x:15.4433917 y:47.0697272
乙:x:15.4433661 y:47.0697722
C: x: 15.4434363 y: 47.0696776
d: x: 15.442966 y: 47.0700098
如果我在 Google 地图引擎上绘制它,我可以看到这些线之间绝对没有交点。
dotproductleft 的结果:-7.372399999828474E-10 和 dotproductright 的结果:1.1921940000328E-8
它对于其他示例非常有效,但在这里我发现它无法正常工作。但我没有发现公式中有任何错误。
The lines包含任何线段(例如 AB 和 CD)的线段将始终相交(除非它们平行)。
您想检查是否线段相交。通过找到交点并检查它是否位于两条线段上,这很容易做到。
因此,使用您的示例,两条线(线段 AB 和 CD 位于其上)相交于P = (15.4434,47.0697)。现在,如果P位于 AB 上,则其点积PA and PB是负数(因为之间的角度PA and PB是 180° 并且余弦(180°)=-1).
如果计算 PA 和 PB 的点积,您将得到一个正数(因此does not躺在AB上)。然而,PC 和 PD 的点积给出一个负数(因此它位于 CD 上)。
因此,如果上述点积(与交点)为负,您可以检查线段是否相交。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)