印刷“蛇”情节

时间:2015-10-06 20:15:06

标签: matlab plot

我需要这样的印刷图:

plot

function draw123(n)
x=1:n;
y=zeros(1,n); 
l=1;
x=[x,n]; y=[y,l];
x=[x,4,3,2]; y=[y,1,1,1]; % from this moment rest of code(with this line) work correctly only for n==6
x=[x,2]; y=[y,2];
x=[x,3,4,5]; y=[y,2,2,2];
plot(x,y)

我的代码仅适用于n == 6但它应该适用于其他所有n(1,2,...,99,100)

1 个答案:

答案 0 :(得分:0)

这不是一个组合的简单任务,但这应该有效。您需要创建一个每次都给出正确点的公式。为了使它更简单,我创建了两个变量lineLengthdirection,它们计算下一行必须有多长,以及它是正方向还是负方向。垂直点在前一个之间交替,在前一个加之一之间交替。此外,我需要访问循环中的前一个元素,所以我在循环之前设置前两个元素。我还在循环之后设置了最后一个值,因为它的行为与其他值不同。

function draw123(n)
y(2*n+1,1) = 0;
x = y;
x(2) = n;

for k = 3:2:2*n-1
    x(k) = x(k-1);
    lineLength = (n-(k-1)/2);
    direction = (-1)^((k-1)/2); % +1 or -1
    x(k+1) = lineLength * direction + x(k-1);
    y(k) = y(k-1)+1;
    y(k+1) = y(k);
end

x(end) = x(end-1);
y(end) = y(end-1)+1;

plot(x,y,'r');