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轴的底部绘制一排倒置三角形,在第一个三角形之后,这很好,下一个三角形划分所有三角形的宽度而不是新三角形。有人知道为什么吗?
答案 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);;