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

标签 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。 附:一种方法可以是找到每个像素(单元)的位置并验证该像素是否在正方形内,但目标是找到一种简单的方法。

最佳答案

最快的方法可能涉及 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

关于algorithm - 使用 0 和 1 给定旋转角度绘制一个正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860728/

相关文章:

matlab - 如何在 Matlab 中使用 PARFOR 与 Core i3 并行 4

linux - MATLAB - 从 mexa64 到 mexmaci64?

java - 在 Java 中将 double[][] 获取到 MATLAB 矩阵的最快方法是什么?

c - (C) 对文本文件中的数组进行基数排序

algorithm - 有没有不依赖于 n(输入的大小)的算法?

javascript - 很长的排列 - 句子字谜

c++ - 得到有很大差异的均值和删除数字

matlab - 如何在 MATLAB 中绘制水平线和垂直线?

matlab - 在 Matlab 图的轴上添加更多点

python - A 和 B 的计数差异最大的最短子串