我有一堆在3D空間中定義多邊形的共麪點。它們總是以同樣的方式纏繞(例如順時針)。我需要確定包含該多邊形的平面的有符號法線,即知道該多邊形的哪個方向「向上」。如何有效地確定三維空間中的多邊形法線?
起初看起來很簡單:取兩條邊(頂點差異)並計算叉積。但是如果邊緣碰巧是共線的(你會得到一個零幅度的交叉積),那就失敗了。
那麼我試着走着頂點列表,直到找到第二個邊緣,這個邊緣與第一個邊緣形成相當大的角度。這可以在凸多邊形上可靠地工作,但如果最終的兩個邊沒有定義多邊形內的三角形,它可能會失敗(指向相反的方向)在非凸多邊形上。
我知道,如果我先對三角形進行三角化,那麼我可以輕鬆可靠地檢查任何三角形的面...但問題是我的三角測量庫需要知道平面正常。所以雞蛋必須放在雞肉前面。
如何在非凸多邊形中選擇兩個邊(或三個頂點),以便可靠地定義多邊形面向哪個方向?
Offtopic。不是一個編程問題。這是更多的幾何/數學。嘗試http://math.stackexchange.com –
在這裏被問到,因爲數學家經常給出一個不容易(或不清楚如何)實現的答案,例如,「如果連接相鄰點的線完全在內,則頂點是耳朵多邊形「......一個真實的陳述,但對實際編碼沒有幫助。我在問一個我可以編碼的算法。 –
@JoeStrout我知道你已經有了一個滿意的答案,所以只是想引起你的注意,我添加了一個不同的(更簡單的)方法,我不確定你會「尋找」另一個答案。 – Amit