2009-12-27 11 views
23

Verilen üç 3D noktaları (A, B, & C) nasıl normal bir vektör hesaplarım? Üç nokta bir düzlem tanımlar ve vektörü bu düzleme dik olarak istiyorum.3 pts verildiğinde normal vektörü nasıl hesap ederim?

Bu gösteren örnek C# kodu alabilir miyim?

+8

Matematik programlama yapmak için bir yeri vardır:

sen (vector3 sınıfı erişimi) OpenTK veya XNA kullanıyorsanız, o zaman basitçe meselesi. Özellikle bu matematik, eğer 3D bir şey yapıyorsanız. – tgamblin

+0

Evet, matematik ancak bu yerine programlama belirli birinin bir vektör matematik belirli bir sorudur, programlama ile ne çok şey vardır. Ben bir Wikipedian değilim, bu yüzden bunu kapatmak için oy vermeyeceğim, sadece bunu işaretliyorum. programlama çeşit yaparken Bu tür bir matematik sık gelir, ancak bu soru olursa olsun kendisine hiçbir kod yönü olduğunu – Esko

+0

Bu doğru. Bu tamamen matematiksel bir cevap ile tamamen bir matematik sorusudur. Bu mathoverflow.com veya google.com aittir. –

cevap

30

Bu puan sırasına bağlıdır. Normal karşıt bir yönde görüldüğü gibi noktaları saat yönünün tersine bir sıra ile belirtilirse, o zaman hesaplamak için basit:

x çapraz üründür
Dir = (B - A) x (C - A) 
Norm = Dir/len(Dir) 

.

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

Eğer yüzey üzerindeki herhangi iki paralel olmayan vektörlerin cross product hesaplamak gerekir. Üç noktanız olduğundan, bunu AB ve AC vektörlerinin çapraz ürününü alarak anlayabilirsiniz. Bunu yaptığınızda

, sen Vikipedi oldukça geniş açıklaması var olan bir surface normal, hesaplama ediyoruz.