我有一個面向任何方向的多邊形,並且定位在三維空間的任何位置。我需要將多邊形轉換爲xy平面,以便我可以在2D中執行各種操作(尤其是在多邊形的邊界框上生成點網格),然後將其轉換回來。將3d多邊形旋轉到xy平面中,同時保持方向
問題出現在轉換後的多邊形的方向上。如果我只想旋轉到平面中,我可以取多邊形的法線與xy平面之間的角度,並圍繞與兩個方向正交的軸旋轉(叉積)。但是,我要求多邊形的邊界框的方向應使邊界框的底部(最低z值)邊與xy平面共面,無論是在變換之前還是之後。換句話說,邊界框平齊地平放在與地面平行的一側。轉換後,該邊緣將平行於x軸。這是爲了使我在表面上生成的點的網格始終有平行於地面的行,而不管多邊形的方向如何。
我的方法是執行兩次旋轉;首先圍繞z軸旋轉由多邊形平面與xy平面相交形成的線與x軸之間的角度。這確保邊界框的底部不會移出xy平面。然後,再次圍繞x軸旋轉多邊形(新)法線與xz平面之間的角度。以下是步驟:
- 找到多邊形平面的公式(來自法線)。
- 找到多邊形的平面和xy平面的交點。這是xy平面中的一條線。
- 找到這條線和x軸之間的角度。
- 繞z軸旋轉多邊形的角度。
- 確定新的正常。
- 找出新法線與xy平面之間的夾角。
- 圍繞x軸以此角度旋轉多邊形。
- 多邊形現在應該位於xz平面中;使用最大/最小x和y值生成邊界框,生成點網格等,然後將所有內容都轉換回開始位置。
我意識到應該合併兩個旋轉來減少矩陣乘法的次數,但這是一般算法。
我不是圖形專家;任何人都可以提供有關此技術的建議有沒有更好的辦法?我的方法聽起來是否正確?我正在使用Java進行開發,並正在使用Transform3D類來進行旋轉。
我投票結束我的問題。這可能太過本地化,而且我的方法無論如何都或多或少是正確的。它會更適合圖形論壇。寫這個問題的行爲幫助我解決了這個問題。 – 2011-06-01 04:35:42