使用角点x,y坐标获取矩形内的所有像素



我有一个500像素乘500像素的图像,用于从250000索引数组中提取数据,其中每个索引代表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坐标中选择左坐标和右坐标。

同时开始沿左边缘和沿右边缘的简单线光栅化扫描:对于当前整数Y值,计算左边缘和右边缘对应的圆角X坐标,并输出(xleft, y)-(xright,y)之间的所有水平线

对于顶点之间的边,(x0,y0)-(x1,y1)公式是

x = x0 + (x1-x0)*(y-y0)/(y1-y0)  

(使用相同技术的三角形示例(

当到达某个顶点时,改变相应边的方程式,继续。

使用这种方法,可以填充三角形、平行四边形、另一个三角形(或者如果两个顶点共享同一个Y,则仅填充两个三角形(

(如有必要,您可以使用Bresenham或DDA,或其他行光栅化算法(

最新更新