Dato un piano e un punto, come posso determinare da quale parte del piano si trova il punto?


8

Dato il punto

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

e l'aereo (triangolo)

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);

Voglio ottenere un piano normale che punta nella direzione di 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();
}

Ma questo metodo è sbagliato. I planeNormalpunti risultanti nella direzione Z negativa, quindi non devono essere negati. Esiste una migliore pratica per questo? Per favore aiutatemi, fallisco enormemente @ matematica :)


Normalizzerei il normale, se stai usando un metodo simile per i calcoli dell'illuminazione.
Ray Dey,

Risposte:


9

Il tuo metodo è per lo più corretto ma manca un passo. Non puoi semplicemente usare la posizione del punto come vettore per ottenere un prodotto punto, devi creare un vettore di direzione da un punto sul piano. Qualsiasi punto sul piano farà (la direzione non deve essere esatta) quindi usa solo uno degli angoli.


Freddo. Perché non importa quale punto sull'aereo viene scelto?
Cameron,

Perché alla fine cerchi solo positivo o negativo dal prodotto punto. Indipendentemente dal valore esatto calcolato, il prodotto punto è positivo per i vettori che puntano da un lato e negativo per i vettori che puntano dall'altro.
jhocking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.