2014-10-11 139 views
3

我想在Matlab上绘制这个图(没有气泡)! enter image description here在MATLAB上画一个金字塔

我写了下面的代码:

figure 
hold on 
axis equal 
axis([0 20 0 10]) 
n = 20 
n = n - 1 

for y = 0:10 
for x = (y+1):n 
    rectangle('Position',[x y 1 1],'curvature',[0 0],'facecolor',(rand(1,3))) 
    pause(0.05) 
end 
end 

我得到执行此代码,如下图:

enter image description here

我需要在代码编写部分帮助,其中正确的数字可以绘制。

+0

这是一个概率y更适合StackOverflow。 – 2014-10-11 10:04:35

回答

2

您在x上的循环开始于正确的点,但在每次迭代中达到最大值。

只需修改循环定义for x = (y+1):nfor x = (y+1):n-y,你会得到期望的结果:

for y = 0:10 
    for x = (y+1):n-y 
     rectangle('Position',[x y 1 1],'curvature',[0 0],'facecolor',(rand(1,3))) 
     pause(0.05) 
    end 
end 

编辑:根据您的意见,您希望通过controling n实现这一目标,这也是可能的,但你必须在外循环的每次迭代中递减n,如下所示:

for y = 0:10 
    for x = (y+1):n 
     rectangle('Position',[x y 1 1],'curvature',[0 0],'facecolor',(rand(1,3))) 
     pause(0.001) 
    end 
    n=n-1 ; 
end 
+0

为什么n-y必要?据我所知,n = 20,然后n = n-1应该单独工作。所以x =(y + 1):n应该很好,因为每次n值比前一次小1。 – Manahil 2014-10-12 11:02:29

+0

那么你不会在你的循环中递减'n'(循环中没有'n = n-1'指令),所以'n'不会改变循环内部的值并且永远保持在10。你冷漠地按照你提到的方式去做,或者其他许多方式。我刚刚给了你一个例子,它需要对你的代码进行最少的修改。 – Hoki 2014-10-12 11:06:42

+0

@Manahil,我修改了答案,按照你的方式进行修改;) – Hoki 2014-10-12 11:11:38