![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9UkeNlXQ65UeVRVTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DNzUTO0YzM0AjMyEDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
隻講原理,代碼需要自己構思、設計,這種算法隻有自己寫出來才能真正的記在腦子裡。
①:正方形區域為顯示區域,該三角形為經典的多次裁剪三角形。
三角形與顯示區域的相交情況有好幾種:三角形全部在顯示區域内、外,部分在顯示區域内;三角形的邊框并沒有和顯示框相交,卻有顯示部分。
網上也有一些相關的算法,但是總結的不是很正确,很清楚。
正确的方法是用每條邊界去裁剪三角形,留下的繼續裁剪。直到每條邊都去裁剪過。
順序無所謂。
在這裡需要判斷點在邊界的内外,很好處理。
裁剪的時候是一條邊一條邊的裁,兩端點一内一外時裁剪,外點由新點(此邊與邊界的交點)替換。此處需注意,裁剪後的形狀比之前的形狀多一條邊,就是多一個頂點,寫代碼的時候需仔細的設計代碼。
一個三角形被矩形裁剪完後,出現的形狀裡,邊數最多的為七邊形,7=3+4,預計生成的多邊形頂點數為源形狀的頂點數+4。
好了,理論講完了。