给定旋转角度使用0和1绘制一个正方形

时间:2012-10-12 14:00:48

标签: algorithm matlab

我正在尝试使用Matlab创建一个函数,该函数采用角度(指定正方形的旋转角度)和正方形的长度,并返回一个包含0和1的矩阵,这样如果和,则每个单元格的值为1只有当该单元格在正方形上时,否则为0。

以下示例有助于使其更加清晰:

d = 8 = length of square 
theta = 0
size of image containing the square = 16

img = zeros(16, 16);
img(o.x-d:o.x+d, o.y-d:o.y+d) = 1
output:
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000111111110000
0000111111110000
0000111111110000
0000111111110000
0000000000000000
0000000000000000
0000000000000000
0000000000000000

上面的示例很容易显示,因为角度等于0。 附:一种方法是找到每个像素(单元格)的位置并验证像素是否在方形内,但目标是找到一种简单的方法。

1 个答案:

答案 0 :(得分:2)

最快的方法可能涉及Bresenham算法的变化,但与检查特定像素是否在方形内部相比,这并没有真正产生那么大的差异。后者通过围绕中心旋转像素坐标并检查它们是否在边界内来完成,例如

x' = (x - w/2)*cos(-alpha) - (y - h/2)*sin(-alpha)
y' = (x - w/2)*sin(-alpha) + (y - h/2)*cos(-alpha)
return abs(x') <= d/2 && abs(y') <= d/2