[英]Efficient way to fill a convex shape
假設我有一個封閉的形狀,如下圖所示,我有邊緣像素。 填充形狀的最有效方法是什么,即在形狀內部打開像素,如果:
1)我有所有的邊緣像素
2)我有大部分邊緣像素而不是所有邊緣像素(如圖所示)。
構造凸包並添加缺少的像素。 然后使用掃描線算法填充多邊形。
這一切都取決於具體情況。
如果手動創建幀緩沖區(基本上使用字節數組或類似的東西),則必須遍歷要更改的所有像素。 因此,例如,從行的最左邊開始:
這當然只有你有所有邊緣像素才有效。 看看Marching Squares ,可以提供一些幫助。
請更具體一點。 “填充形狀的最有效方法”取決於您的底層渲染庫,如果它是光柵圖形等等......
編輯注意,如果你可以生成邊緣像素,算法要快得多,那么就不需要尋找邊緣的開始了。
標准的泛洪填充算法在凸形狀上非常有效,並且可以處理形狀比預期的凸起更小的情況。 不幸的是,它需要不間斷的輪廓。
在你可以填充內部的東西之前,你需要確定確切的邊界,在這種情況下,這將構成識別圓。
之后,您可以在圓圈周圍查看每個像素的框,如果它實際上在其中。 因為您必須對圓內的每個像素執行某些操作,並且圓中像素的數量與邊界正方形的像素數呈線性關系(假設邊界正方形的邊具有某個常數的長度'半徑*常數'),應該接近最佳狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.