用于循环线绘制的Matlab

时间:2014-04-27 01:42:23

标签: matlab

width=50;
height=30;
level=42;
triangles=10;

function sq = create_square(width, height, level, triangles)
    sq(1,:)=[0 level];
    count=2;
    for i=1:triangle
        sq(count,:)=[i*width level];
        sq(count+1,:)=[i*(width/2) level-height];
        sq(count+2,:)=[(i-1)*(width) level];
        count=count+3;
    end

function plot_objects_2d( object, col ) 
    hold on;
    plot( object(2:end,1), object(2:end,2), col, 'LineWidth', 1.5 );
    hold off;

function display_image( im ) 
    image( im(end:-1:1,:,:) );  % flip image
    axis image;
    set(gca, 'ydir', 'normal'); % flip axis
    h = gca;
    axis on;

我正在尝试在y轴的底部绘制一排倒置三角形,在第一个三角形之后,这很好,下一个三角形划分所有三角形的宽度而不是新三角形。有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

在这样的情况下,你需要定义你想要获得的点序列(用手计算前三个三角形),然后仔细思考你的循环正在做什么。

对于任何给定的i:

您计算的第一个点是i*width 您计算的第二点是i*width/2 第三点是(i-1)*width

第一点和第三点之间的差异为width,与i无关。但是,第一个和第二个点之间的差异是i*width/2

如果你希望第二个点在第三个和第一个点之间保持相等的间距(例如总是因width/2而不同),那么你需要做类似的事情:

sq(count+1,:)=[i*width-width/2 level-height];

总的来说,并不是说在这种情况下会产生很大的不同 - 你在这里真的不需要循环。

sq = zeros(1+triangles*3,2);

%y values
sq(:,2) = level; % mostly this
sq(3:3:end,2) = level-height; % fill in the others

%x values
sq(2:3:end,1)=width*(1:triangles);
sq(3:3:end,1)=width*(1:triangles)-width/2;
sq(4:3:end,1)=width*(0:triangles-1);;