我在3D中有一個凸多邊形。爲了簡單起見,讓它成爲帶頂點的正方形,(0,0,0),(1,1,0),(1,1,1),(0,0,1).
。我需要按逆時針順序排列這些頂點。我找到了一個解決方案here。建議確定多邊形中心的角度並對其進行分類。我不清楚這是如何工作的。有沒有人有辦法解決嗎?我需要一個解決方案,即強大的,甚至在頂點非常接近時工作。在MATLAB中逆時針方向排列三維凸多邊形平面的頂點
MATLAB代碼示例將非常感謝!
我在3D中有一個凸多邊形。爲了簡單起見,讓它成爲帶頂點的正方形,(0,0,0),(1,1,0),(1,1,1),(0,0,1).
。我需要按逆時針順序排列這些頂點。我找到了一個解決方案here。建議確定多邊形中心的角度並對其進行分類。我不清楚這是如何工作的。有沒有人有辦法解決嗎?我需要一個解決方案,即強大的,甚至在頂點非常接近時工作。在MATLAB中逆時針方向排列三維凸多邊形平面的頂點
MATLAB代碼示例將非常感謝!
這實際上是一個相當乏味的問題,所以不是實際做這件事,我只是想解釋我該怎麼做。首先find the equation of the plane(你只需要使用3分),然後找到你的rotation matrix。然後在你的新的旋轉空間中找到你的向量。之後,所有的說法和完成find which quadrant你的觀點是,如果n> 1在一個特定的象限,那麼你必須找到每個點的角度(theta = arctan(y/x))。然後,簡單地按照它們的角度對每個象限進行排序(可以說,你可以通過pi而不是象限來進行分離(當y分量(後旋轉)大於零時將點分類)。有時間實際測試這個,但給它一個去,並隨時發佈您的代碼,我可以幫助調試,如果你喜歡。
謝謝!你的意見給了我一些想法。我的解決方案基於您對旋轉飛機的評論。畢竟這並不困難。 – 2013-02-28 06:46:14
沒問題,很高興大學的所有數學幫助某人。您應該詳細說明您的答案並將其標記爲已解決:) – tmwoods 2013-02-28 14:03:45
幸運的是你有一個凸多邊形,所以你可以使用角度技巧:找到一個點在內部(例如,找到兩個非相鄰點的中點),並向所有頂點繪製矢量,選擇一個矢量作爲基底,計算與其他矢量的角度並對它們進行排序。點積:A·B = ABcosθ= | A || B |cosθ。
這是很長一段時間,因爲我用這個,所以我可能是錯的,但我相信命令convhull
做你所需要的 - 它返回一組點的凸包(它,因爲你說你的點是一個凸集,應該是本身的一組點),按逆時針順序排列。
請注意,MathWorks最近發佈了一個新類DelaunayTri
,該類旨在取代convhull
和其他較舊的計算幾何元素的功能。我相信這更準確,尤其是當積分變得非常接近時。但是我沒有嘗試過。
希望有幫助!
如果多邊形是2D,則您提到的功能將起作用。對於我的問題他們不會。 – 2013-02-28 06:44:29
所以這裏的另一個答案,如果你想使用convhull。通過設置一個座標零點,輕鬆地將多邊形投影到座標軸平面中。例如,在(0,0,0),(1,1,0),(1,1,1),(0,0,1)中設置y = 0得到(0,0),(1, 0),(1,1),(0,1)。現在你的問題是2D。
如果您的多邊形的平面與某個軸正交,您可能需要做一些工作才能選取正確的座標,如果是,請選擇該軸。標準是確保您的投影點不會排在最後。
我將實施導數分析,但你怎麼能由2D參數整理一些東西(即順時針方向)時,他們在三維空間中存在嗎? – tmwoods 2013-02-27 04:10:52
點在3D空間中,但在飛機上。我只需要訂購 - 順時針或逆時針。 – 2013-02-27 04:13:47
我的不好,在標題中沒有看到。我是白色的,我會讓你知道,如果我拿出一些不涉及旋轉矩陣的固體(這可能是屁股中最強壯但最大的痛苦)。 – tmwoods 2013-02-27 04:15:00