2013-01-17 90 views
9

我有一個3D點列表。我知道他們都是共面的。我有我想要分類的中心,以及點和中心所在平面的法線。我如何測試一點是否正確(或左)另一點?將三維共麪點的列表排序爲順時針或逆時針

我明白如何在2D中做到這一點。 Sort points in clockwise order?解釋如何比較2d點。所以我認爲我需要以某種方式將所有點和中心轉化爲局部2d平面座標。我怎樣才能做到這一點?這是解決這個問題的最有效的方法嗎?

//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 

我該如何適應這個來處理3d共麪點?

+0

「順時針」在3-d中沒有意義,因爲它取決於你在哪個方向看飛機。翻轉飛機,突然順時針逆時針旋轉。 – 2013-01-17 01:54:14

+0

@woodchips這個問題並不是3-d所特有的。並非所有二維座標系統都以相同的方式定義。在這兩種情況下,你只需要定義什麼是「順時針」。 – DuckMaestro

+0

我明白你在說什麼,知道這是一件好事。你認爲指定飛機的正常方向可以解決這個問題嗎?現在順時針方向對我來說也不是很重要,但我仍然需要按照一致的方向排序。 – AAB

回答

14

沒有必要將所有內容都轉換爲2D。

您有中心C和正常n。爲了確定點是順時針還是從點逆時針方向,計算點(Ñ,橫( - Ç - Ç))。如果結果是肯定的,B是從A逆時針;如果是負數,B是從A開始順時針。

相關問題