這是乙個通用的多邊形裁剪演算法,既可以裁剪凸多邊形也可以裁剪凹多邊。
通過下圖來描述演算法的執行過程
圖中dcba為裁剪視窗,dcba為要裁剪的多邊形。在演算法執行之前將多邊形和裁剪視窗的交點分別加入他們的頂點序列。即圖中的123456。
則多邊形序列為:a,6,5,d,4,3,c,2,b,1
裁剪視窗序列為:a,5,4,d,c,1,b,2,3,6
從多邊形頂點a開始按逆時針方向遍歷多邊形頂點。到達多邊形與裁剪邊界的交點6,此時線段是從裁剪區的外部進入裁剪區內部
(即交點6乙個entering intersection),則在多邊形序列上繼續遍歷直到找到第乙個從邊界「出去」的點或者乙個已經遍歷過的點,圖中所示為交點5(稱交點5為乙個exiting intersection);
此時線段從裁剪區內出去,這時在裁剪視窗序列的當前頂點開始逆時針遍歷(此時為交點5),到達交點4,線段d4指向多邊形內部,交點4是乙個entering intersection;
轉換到多邊形序列繼續遍歷,到交點3,交點3是乙個exiting intersection;
轉換到裁剪視窗序列逆時針遍歷,到交點6,發現6已經訪問過,得到頂點序列6543,即為乙個要繪製的多邊形;
這時退回到最後乙個exiting intersection,即頂點3,在多邊形序列上遍歷,找到乙個 entering intersection,即點2,然後按照上述過程得到乙個頂點序列2b1b,此時多邊形所有的點均已訪問,演算法結束;
整個演算法就是先計算多邊形和裁剪視窗的頂點序列,然後根據交點是乙個entering intersection還是exiting intersection選擇在不同的頂點序列上遍歷,直到所有的點都訪問完
輸入給出多邊形序列和裁剪視窗的序列,首先要乙個預處理將他們的交點按依序插入各自的序列,乙個比較直接的辦法,可以直接按逆時針遍歷這兩個序列,每次取2個點組成乙個線段與另乙個序列的每條邊比較計算交點,得出乙個要插入的點集,然後按照該點集中的每個點到線段起點的距離按序插入,離起點近的就先插入;
《計算機圖形學》 赫恩
多邊形裁剪二 Weiler Atherton演算法
weiler atherton 任意多邊形裁剪 sutherland hodgeman 演算法解決了裁剪視窗為凸多邊形視窗的問題,但一些應用需要涉及任意多邊形視窗 含凹多邊形視窗 的裁剪。weiler atherton 多邊形裁剪演算法正是滿足這種要求的演算法。一 weiler atherton 任...
Weiler Atherton多邊形裁剪演算法
來自 這是乙個通用的多邊形裁剪演算法,既可以裁剪凸多邊形也可以裁剪凹多邊。通過下圖來描述演算法的執行過程 圖中dcba為裁剪視窗,dcba為要裁剪的多邊形。在演算法執行之前將多邊形和裁剪視窗的交點分別加入他們的頂點序列。即圖中的123456。則多邊形序列為 a,6,5,d,4,3,c,2,b,1 裁...
pytorch 多GPU訓練(單機多卡 多機多卡)
首先是資料集的分布處理 需要用到的包 torch.utils.data.distributed.distributedsampler torch.utils.data.dataloader torch.utils.data.dataset distributedsampler這個包我們用來確保dat...