我正在尝试使用两个选项中上部 http://www.blackpawn.com/texts/pointinpoly/default.html 公式。 (我已经使用了较低的)。
我只是似乎无法理解交叉产品(b-a,p1-a)等。 有人可以为我扩展这些。 他们在下面。
function SameSide(p1,p2, a,b)
cp1 = CrossProduct(b-a, p1-a)
cp2 = CrossProduct(b-a, p2-a)
if DotProduct(cp1, cp2) >= 0 then return true
else return false
据我了解,他们应该出来解决这个问题。
## Using the following as p=x,z, a=x,z, b=x,z, c=x,z
## p=4,1 a=2,0 b=4,3 c=0,4
function SameSide(px, pz, ax, az, bx, bz, cx, cz){
cp1x=(cx-bx*px-bx)
cp1z=(cz-bz*pz-bz)
cp2x=(cx-bx*ax-bx)
cp2z=(cz-bz*az-bz)
DotProd=(cp1x*cp2x+cp1z*cp2z)
}
但是在Excel中尝试此操作时,我再次得到错误的答案。
请帮忙! 8-|
您的DotProduct
计算是正确的。但是,v
和w
的 2 个向量的叉积为 :
cpx = vy*wz - vz*wy
cpy = vz*wx - vx*wz
cpz = vx*wy - vy*wx
在您的情况下,vx = bx-ax
vy = by-ay
和 vz=bz-az
,wx= p1x-ax
(或分别p2x-ax
)以及类似的 y
和 z
。