[英]Get all pixels within a rectangle using corner x,y coordinates
我有一個 500 x 500 像素的圖像,我用它從 250,000 索引數組中提取數據,其中每個索引代表 1 個像素。
用戶可以在任何方向繪制一個矩形,我正在捕獲每個角的坐標。
我正在嘗試捕獲矩形內的每個像素以引用數據數組並提取相關數據。
我查看了 Javascript 中的 Bresenham 算法,雖然我可以使用此解決方案獲取每個坐標之間的所有點,但我無法遍歷這些點,因為路徑並不總是包含相同數量的像素。
我正在尋找使用以下坐標的值的示例是:
corner1 = [100,100]
corner2 = [100,105]
corner3 = [105,105]
corner4 = [105,100]
結果(排序順序並不重要):
pixelsInRectangle = [
[100,100],[100,101],[100,102],[100,103],[100,104],[100,105],
[101,100],[101,101],[101,102],[101,103],[101,104],[101,105],
[102,100],[102,101],[102,102],[102,103],[102,104],[102,105],
[103,100],[103,101],[103,102],[103,103],[103,104],[103,105],
[104,100],[104,101],[104,102],[104,103],[104,104],[104,105],
[105,100],[105,101],[105,102],[105,103],[105,104],[105,105]
]
我試圖解決的一組坐標是:
corner1 = [183,194]
corner2 = [190,189]
corner3 = [186,184]
corner4 = [179,190]
任何建議將不勝感激!
如果矩形不是軸對齊的:
按 Y 坐標對頂點排序。
獲得最低的。 從接下來的兩個 Y 坐標中選擇左坐標和右坐標。
同時沿左邊緣和右邊緣開始簡單的線光柵化掃描:對於當前 integer Y 值,計算左邊緣、右邊緣和 output 之間的所有水平線(xleft, y)-(xright,y)
對應的圓形 X 坐標
對於頂點(x0,y0)-(x1,y1)
之間的邊,公式為
x = x0 + (x1-x0)*(y-y0)/(y1-y0)
( 三角形利用相同技術的例子)
當到達某個頂點時,改變對應邊的方程,繼續。
使用這種方式,您可以填充三角形、平行四邊形、另一個三角形(或者如果兩個頂點共享相同的 Y,則只填充兩個三角形)
(您可以使用 Bresenham 或 DDA,或其他線光柵化算法,如有必要)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.