查看x
单独的两个值以简化此调查。在您的第一次迭代之后,x
将是2
and 1
,在第二次迭代中1
and 0.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
有了这个,循环之外就不会有任何东西了。这曾经涵盖了您在问题中显示的代码块中所有有趣的图形。