Étant donné le point
Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);
et l'avion (triangle)
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);
Je veux obtenir un avion pointant normalement dans la direction 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();
}
Mais cette méthode est fausse. Les planeNormal
points résultants dans la direction Z négative, il ne faut donc pas les annuler. Existe-t-il une meilleure pratique pour cela? S'il vous plaît, aidez-moi, j'échoue massivement @ math :)
collision-detection
normals
Daniel Szalay
la source
la source
Réponses:
Votre méthode est généralement correcte mais manque une étape. Vous ne pouvez pas simplement utiliser la position du point comme vecteur pour obtenir un produit scalaire, vous devez créer un vecteur de direction à partir d'un point sur le plan. N'importe quel point de l'avion fera l'affaire (la direction n'a pas besoin d'être exacte) alors utilisez simplement l'un des coins.
la source