Matlab绘制褪色方块

时间:2013-01-30 02:38:30

标签: matlab draw shapes

我需要在MATLAB中创建一个与此类似的脚本:

The shape I have to make

但是我所拥有的代码不起作用,它给了我相反的,因为,正方形的大小增加而不是缩小。

x = [0 0 2 2];
y = [0 2 2 0];
fill(x,y,'r');
hold on
for i = 1:10
x = [(x(3)) (x(3)) (x(3)/2) (x(3)/2)];
y = [(y(3)) (y(2)/2) (y(2)/2) (y(3))];
fill(x,y,'r');
end

请提供解释和答案,因为我想了解我做错了什么。

1 个答案:

答案 0 :(得分:2)

单独查看x的两个值以简化此调查。在第一次迭代后,x将是21,在第二次迭代10.5中。这意味着你正在接近零,正方形变得越来越小,与你想要做的相反。

你如何开始接近原点并随着你走得更远而缩小?您可以初始化x = [0, 2];y = [0, 2];。我们这里只使用了两个元素,因为对于与轴对齐的正方形,这就是我们所需要的。第一次迭代可以从前一个正方形的边长度开始移位,如x = x + x(2) - x(1);中所示。方块也必须缩小,所以你可以将左角移动一小部分边长,例如x(1) = x(1) + (x(2) - x(1)) * 0.1;。总而言之,你的循环看起来像

close all, clear all;
x = [0, 2];
y = [0, 2];
hold on;
for k = 0 : 9
    edge_len = x(2) - x(1);
    x = x + edge_len;  % shift
    x(1) = x(1) + 0.2 * edge_len;  % slightly shift right to shrink
    y = y + edge_len;
    y(1) = y(1) + 0.2 * edge_len;
    fill([x(1), x(1), x(2), x(2)], [y(1), y(2), y(2), y(1)], 'r');
end

请注意,我们已将x(2) - x(1)替换为edge_len。然后我们设置你的颜色的另一个问题。您可以使用颜色矢量c = [1, k / 10, k / 10]来创建从红色到近乎白色的渐变。然后,您使用fill(..., 'r');

代替fill(..., c);

这样,循环外不会有fill。这通常用于覆盖您在问题中显示的代码块中所有有趣的图形。