2009-12-27 17 views
23

Dando tres puntos tridimensionales (A, B, & C) ¿cómo calculo el vector normal? Los tres puntos definen un plano y quiero que el vector sea perpendicular a este plano.Dados 3 puntos, ¿cómo calculo el vector normal?

¿Puedo obtener el código de muestra C# que demuestra esto?

+8

Matemáticas tiene mucho que ver con la programación. Especialmente esta matemática, si estás haciendo algo 3D. – tgamblin

+0

Sí, las matemáticas tienen mucho que ver con la programación, sin embargo, esta es una pregunta específica de matemáticas vectoriales en lugar de programar una específica. No soy un wikipedista, así que no votaré por cerrar esto, solo señalarlo. – Esko

+0

Es cierto que este tipo de matemáticas aparece con frecuencia cuando se hace algún tipo de programación, pero esta pregunta no tiene ningún aspecto de código en absoluto. Esta es una pregunta puramente matemática con una respuesta puramente matemática. Pertenece a mathoverflow.com o google.com. –

Respuesta

30

Depende del orden de los puntos. Si se especifican los puntos en un orden en sentido antihorario como se ve desde una dirección opuestas la normal, entonces es fácil de calcular:

Dir = (B - A) x (C - A) 
Norm = Dir/len(Dir) 

donde x es el producto cruzado.

Si está utilizando OpenTK o XNA (tener acceso a la clase Vector3), entonces es simplemente una cuestión de:

class Triangle { 
    Vector3 a, b, c; 
    public Vector3 Normal { 
     get { 
      var dir = Vector3.Cross(b - a, c - a); 
      var norm = Vector3.Normalize(dir); 
      return norm; 
     } 
    } 
} 
1

Necesita calcular el cross product de dos vectores no paralelos en la superficie. Como tiene tres puntos, puede resolver esto tomando el producto cruzado de, digamos, vectores AB y AC.

Cuando haces esto, estás calculando un surface normal, de los cuales Wikipedia tiene una explicación bastante extensa.

Cuestiones relacionadas