交叉乘积和点积 - 扩展这些等式

时间:2012-11-25 10:48:15

标签: triangulation dot-product cross-product

我正在尝试使用http://www.blackpawn.com/texts/pointinpoly/default.html中两个选项上方的公式。 (我已经使用了较低的)。

我似乎无法绕过CrossProduct(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- |

1 个答案:

答案 0 :(得分:1)

您的DotProduct计算是正确的。但是,2个向量vw的叉积为:

cpx = vy*wz - vz*wy
cpy = vz*wx - vx*wz
cpz = vx*wy - vy*wx

在您的情况下,vx = bx-ax vy = by-ayvz=bz-az,以及wx = p1x-ax(或分别为p2x-ax),同样适用于{{1 }和y