0

2つのオプションの上部にある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- |

4

1 に答える 1

1

あなたのDotProduct計算は正しいです。vただし、2 つのベクトルとの外積wは次のとおりです。

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

あなたの場合、vx = bx-axvy = by-ayand vz=bz-az、および wx= p1x-ax(またはそれぞれp2x-ax) と同様にyand z.

于 2012-12-09T18:56:14.100 に答える