Dado un plano y un punto, ¿cómo puedo determinar en qué lado del plano está el punto?

8

Dado el punto

Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);

y el plano (triángulo)

Vector a = new Vector(-6.599999904632568, 0.0, -78.5, 1.0);
Vector b = new Vector(6.599999904632568, 0.0, -78.5, 1.0);
Vector c = new Vector(6.599999904632568, 4.400000095367432, -78.5, 1.0);

Quiero conseguir un avión normal apuntando en la dirección de pos

//Getting plane normal
Vector ac = Vector.Subtract(a,c);
Vector bc = Vector.Subtract(b,c);
Vector planeNormal = Vector.CrossProduct(bc, ac);

//Testing which side of the plane the point is on
double dprod = Vector.DotProduct(planeNormal, pos);
if (dprod < 0)
{
    planeNormal.Negate();
}

Pero este método está mal. Los planeNormalpuntos resultantes en la dirección Z negativa, por lo que no se debe negar. ¿Hay una mejor práctica para esto? Por favor, ayúdame, fallo masivamente @ matemáticas :)

Daniel Szalay
fuente
Normalizaría lo normal, si está utilizando un método similar para los cálculos de iluminación.
Ray Dey el

Respuestas:

9

Su método es mayormente correcto pero se pierde un paso. No puede simplemente usar la posición del punto como el vector para obtener un producto de puntos, necesita crear un vector de dirección desde un punto en el plano. Cualquier punto en el avión funcionará (la dirección no necesita ser exacta), así que solo usa una de las esquinas.

jhocking
fuente
Frio. ¿Por qué no importa qué punto del avión se elija?
Cameron
Porque solo está buscando positivo o negativo del producto punto al final. Independientemente del valor exacto calculado, el producto de puntos es positivo para los vectores que apuntan a un lado y negativo para los vectores que apuntan al otro.
jhocking