電腦圖形學(二)輸出圖元_10_多邊形填充區_2_分割凹多邊形

來源:互聯網
上載者:User

標籤:

分割凹多邊形

       一旦識別出凹多邊形,我們可以將它切割成一組凸多邊形。這可使用邊向量和邊叉積來完成。我們可以利用頂點和邊延長線的關係來確定哪些頂點在其一側,哪些頂點在另一側。在下面的演算法中我們假定所有多邊形均在xy平面上。當然,在全局座標系中描述的多邊形的初始位置可能不在xy平面上,但我們可以使用第5章的討論的變換方法將它們移到xy平面上。對於分割凹多邊形的向量方法(vector method),我們首先要形成邊向量。給定相繼的向量位置Vk和Vk+1定義邊向量:

 

       接著按多邊形邊界順序計算連續的邊向量的叉積。如果有些叉積的z分量為正而另一些為負,則多邊形為凹多邊形;否則,多邊形為凸多邊形。這意味著不存在三個連續的頂點共線,即不存在連續兩個邊向量其叉積為0。如果所有頂點共線,則得到一個退化多邊形(一條線段)。我們可以通過逆時針方向處理邊向量來應用向量方法。如果有一個叉積的z分量為負值(3.43所示),那麼多邊形為凹且可沿叉積中第一邊向量的直線進行切割。下面的例子給出了分割凹多邊形的這一方法。

例3.4分割凹多邊形的向量方法

圖3.44給出了一個有6個頂點的凹多邊形。該多邊形的邊向量表示為

 

這裡的z分量均為0,因為所有邊均在xy平面上。兩個連續的邊向量的叉積Ejx Ek是垂直於xy平面的向量,其分量等EjxEky- EkxEjy:

 

        因為叉積E2 x E3的z分量為負,我們沿向量E2的直線分割多邊形。該邊的直線方程中的斜率為1而y軸截距為-1。然後我們可以確定這條直線和其他邊的交點來將多邊形分割成兩片。其他邊又積不為負,所以得到的兩個多邊形均為凸多邊形。

       我們還可以使用旋轉法(rotational method)來分割凹多邊形。沿多邊形的邊的逆時針方向,逐一將頂點Vk移到座標系原點。然後順時針旋轉多邊形,使下一頂點Vk+1落在x軸上。如果再下一個頂點Vk+2位於x軸下面,則多邊形為凹。然後我們利用x軸將多邊形分割成兩個新多邊形,並對這兩個新多邊形重複使用凹測試。上述步驟一直重複到多邊形中所有頂點均經過測試。對象位置旋轉和平移的方法將在第5章討論。圖3.45給出了分割凹多邊形的旋轉法。

 


將凸多邊形分割成三角形集

      一旦有了一個凸多邊形的頂點集,我們可以將其變成一組三角形。這通過將任意順序的三個連續頂點定義為一個新多邊形(三角形)來實現。然後將三角形的中間頂點從多邊形原頂點隊列中刪除。接著使用相同的過程處理修改後的頂點隊列來分出另一個三角形。這種分割一直進行到原多邊形僅留下三個頂點,它們定義三角形集中的最後一個。凹多邊形也可以使用這種方法分割為三角形集,但要求每次三頂點形成的內角小於180o(一個“凸”角)。

電腦圖形學(二)輸出圖元_10_多邊形填充區_2_分割凹多邊形

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.