2

Matlab を使用して、角度 (正方形の回転角度を指定) と正方形の長さを取り、各セルの値が 1 になるように 0 と 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 に等しいため、簡単に表示できます。 PS 方法は、各ピクセル (セル) の位置を見つけて、ピクセルが正方形の内側にあるかどうかを確認することですが、目標は単純な方法を見つけることです。

4

1 に答える 1

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
于 2012-10-12T14:18:12.240 に答える