2013-01-17 25 views
9

3B noktaların bir listesini görüyorum. Onların hepsi eşmanlı olduklarını biliyorum. Onları sıralamak istediğim merkezim var ve normal, noktaların ve merkezin üzerinde bulunduğu düzlemde. Bir noktanın başka bir noktanın (ya da solun) doğru olup olmadığını nasıl test edebilirim?3d coplanar noktalarının bir listesini saat yönünde veya saat yönünün tersine çevirme

2B'de nasıl yapılacağını anlıyorum. Sort points in clockwise order?, 2d puanların nasıl karşılaştırılacağını açıklar. Bu yüzden, tüm noktaları ve merkezi bir şekilde yerel 2d düzlem koordinatlarına gizlemem gerektiğini düşünüyorum. Bunu nasıl yapabilirim? Bu sorunu çözmek için en etkili yol mu?

//from link: 
// a and b are points 
//center is the center around which to determine order 
//int num = (a.x-center.x) * (b.y-center.y) - (b.x - center.x) * (a.y - center.y); 
//if num=0 then they're on the same line 
//if num <0 or num>0 then a is to the left or right of b 

Bunu, 3d eşlemeli noktaları işlemek için nasıl uyarlayabilirim?

+0

3-d'de "Saat yönünde" hiçbir anlamı yoktur, çünkü düzlemde hangi yöne baktığınıza bağlıdır. Düzlemi çevirin ve saat yönünde saat yönünün tersine. –

+0

@woodchips Sorun, 3-d'ye özgü değil. 2 boyutlu koordinat sistemlerinin tümü de aynı şekilde tanımlanmamıştır. Her iki durumda da, sadece "saat yönünde" ile ne ifade edildiğini tanımlamanız gerekir. – DuckMaestro

+0

Ne söylediğini görüyorum, bunu bilmek iyi bir şey. Uçağın normal yönünü belirten şeyin bunu temizleyeceğini düşünüyor musunuz? Saat yönünde şu anda bana da bir şey ifade etmiyor, ama yine de noktaları tutarlı bir şekilde sipariş etmem gerekiyor. – AAB

cevap

14

Her şeyi 2B'ye dönüştürmenize gerek yoktur.

Merkezi C ve normal n'a sahipsiniz. nokta B saat yönünde ya da saat yönünün tersine alanına bir olup olmadığını belirlemek için, nokta (- C, B-) N, çapraz (bir) hesaplar. Sonuç pozitif ise, B, A'dan; Eğer negatifse, BA'dan saat yönünde.

İlgili konular