CrossProduct и DotProduct - Раскройте эти уравнения

Я пытаюсь использовать формулы из http://www.blackpawn.com/texts/pointinpoly/default.html верхнего из двух вариантов. (Я уже использовал нижний).

Я просто не могу обернуть голову вокруг CrossProduct(ba, 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 ответ

Решение

Ваш DotProduct вычисление верно. Тем не менее, перекрестное произведение 2 векторов v а также w является:

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

где в вашем случае, vx = bx-ax вы = by-ay а также vz=bz-azи WX =p1x-ax (или соответственно p2x-ax) и аналогично для y а также z,

Другие вопросы по тегам