在Matlab中无边界绘制多个多边形
我正在创建一个包含许多多边形的图形,这些多边形可以在Matlab中重叠。我不想在任何形状的边界,只有一个半透明的填充。我能够使用以下方法获得第一个形状以满足此要求:在Matlab中无边界绘制多个多边形,matlab,graphics,2d,Matlab,Graphics,2d,我正在创建一个包含许多多边形的图形,这些多边形可以在Matlab中重叠。我不想在任何形状的边界,只有一个半透明的填充。我能够使用以下方法获得第一个形状以满足此要求: fill(xv,yv,'blue','FaceAlpha',0.1,'EdgeColor','None','LineStyle','none');hold on; 但是,在循环中绘制的每个后续形状都会忽略此样式,而不是在彩色边框中循环。我可以使用set命令覆盖颜色循环,但这仍然会绘制边框…我不想要任何边框。边界根本无法绘制,因为我
fill(xv,yv,'blue','FaceAlpha',0.1,'EdgeColor','None','LineStyle','none');hold on;
但是,在循环中绘制的每个后续形状都会忽略此样式,而不是在彩色边框中循环。我可以使用set命令覆盖颜色循环,但这仍然会绘制边框…我不想要任何边框。边界根本无法绘制,因为我们使用的是形状的重叠属性,任何边界的存在都会扰乱模拟的性质
以下是完整的代码:
for count = 1:92
x=randn*clustering;
y=randn*clustering;
angle=randn*360;
rectangle(width,height,x,y,angle);
end
function rectangle(w,h,x,y,angle)
%Define the rectangle
xv=[x x+w x+w x x];
yv=[y y y+h y+h y];
%Define the rotation transformation matrix
transform=[cos(angle) -sin(angle);sin(angle) cos(angle)];
%Define the translation to origin transform
xcenter=x+.5*w;
ycenter=y+.5*h;
%Perform translation to origin
tx=xv-xcenter;
ty=yv-ycenter;
%Perform rotation
rotated=transform*[tx;ty];
%Perform translation back to original location
xv=rotated(1,:)+xcenter;
yv=rotated(2,:)+ycenter;
%Plot result
figure(1);
plot(xv,yv);
fill(xv,yv,'blue','FaceAlpha',0.1);hold on;
axis square;
axis([-30 30 -30 30]);
当我用两个不同的向量值尝试这个代码时,
xv
,yv
我没有得到任何边界。我得到的是重叠区域中的不同颜色,因为这两种颜色由于alphaWell而“添加”在那里,然后对于您绘制的所有颜色,都使用“EdgeColor”、“none”,当我绘制多个多边形时,我也不会得到边界。你应该告诉我们你的循环代码。这里可能有一条指令,与您作为示例给出的简单行不同。另外,函数fill
创建一个patch
对象并自动设置一些属性。如果你想要更多的控制,可以直接使用patch
。alpha值的“加法”正是我们所追求的,因为它表示形状重叠区域的程度。函数fill
工作正常,但你正上方的行执行:plot(xv,yv)代码>。此指令将绘制一条线,表示多边形的轮廓(看起来像“边界”)。注释这一行,将'EdgeColor','None'
添加到fill
的参数中(只是为了确保),您就可以了。