Matlab之Mupad散点画线并填充斜线阴影

点对数组:( [ x1,y1]…. [xn,yn] ) 做线:

num := 50;
for i from 1 to num do
x(i) := (i*PI)/num;
end_for;
for i from 1 to num do
y(i) := sin(x(i));
z(i) := cos(x(i));
end_for;

// f1 := plot::Line2d([x(i),y(i)],[x(i+1),y(i+1)],Color=RGB::Blue) $ i=1..(num-1) ;
// f2 := plot::Line2d([x(j),z(j)],[x(j+1),z(j+1)],Color=RGB::Red) $ j=1..(num-1) ;
// plot(f1,f2);
f3 := plot::Polygon2d([[x(i),y(i)] $i = 1..(num-1)],Closed = FALSE);
// S1 = plot::Scene2d(f3,Filled = TRUE,FillStyle = Winding);
plot(f3,Filled = TRUE,FillStyle = Winding);

 

使用了plot::Polygon2d 也就是把这些点看做多边形上的部分顶点,然后做多边形。可以通过选项

Closed = TRUE 或者 Closed = FALSE来设置是否要把这个多边形弄成封闭的多边形。

在plot的时候 设置Filled = TRUE来填充,并使用FillStyle来设置填充方式。

上边的那段代码的运行图为:

这种方法的数组画线法明显比上篇文章里面的三种方法都要好,简便而且好看。

对于例如

这样起终点不在同一个水平线上的,如果直接采用上边的填充方法就会出现很恶心的情况,这是因为虽然起终点没有连接在一块,但仍然把他们连在一块来看做多边形的。你懂的,图如下:

那么,处理方法就是,添加两个额外的点,额外的点分别对应始终点的x轴映射点。 如下f4. 为了不让f4显示出来边只用来显示填充,把他的边颜色设置成白色。而边部分另外画,如f5

f4 := plot::Polygon2d([[x(1),0],[x(i),z(i)] $i=1..(num),[x(num),0]],Closed = FALSE,Color=RGB::White);
f5 := plot::Polygon2d([[x(i),z(i)] $i=1..(num)],Closed = FALSE,Color=RGB::Red);

f4, f5效果图:

这正是我们想要的结果!!!

那么把f3 和 f4,f5画在一块,为了区分阴影部分,就要对阴影填充方式进行设置,用Fillpattern参数:

f3,f4,f5的赋值再次写在这里:

f3 := plot::Polygon2d([[x(i),y(i)] $i = 1..(num-1)],Closed = FALSE,Color=RGB::Blue,FillPattern = FDiagonalLines); //设置成反斜线
f4 := plot::Polygon2d([[x(1),0],[x(i),z(i)] $i=1..(num),[x(num),0]],Closed = FALSE,Color=RGB::White);
f5 := plot::Polygon2d([[x(i),z(i)] $i=1..(num)],Closed = FALSE,Color=RGB::Red);
plot(f3,f4,f5,Filled = TRUE,FillStyle = Winding ,Layout = Horizontal);

效果图:

还阔以。 回宿舍了。明天再探讨如何只在两个线之间画线。

继续昨天的讨论,在两线之间画阴影。  大致思想就是,把需要画阴影的部分的两线之间的点连成一个多边形。不解释了,自己看代码和下面的截图:

f3 := plot::Polygon2d([[x(i),y(i)] $i = 1..(num-1)],Closed = FALSE,Color=RGB::Blue,FillPattern = FDiagonalLines); //设置成反斜线
//f4 := plot::Polygon2d([[x(1),0],[x(i),z(i)] $i=1..(num),[x(num),0]],Closed = FALSE,Color=RGB::White);
f5 := plot::Polygon2d([[x(i),z(i)] $i=1..(num)],Closed = FALSE,Color=RGB::Red);
//plot(f3,f4,f5);
f6 := plot::Polygon2d([[x(i),y(i)] $i=20..(30),[x(abs(j-30)),z(abs(j-30))] $j = 0..10],Closed = TRUE,Color = RGB::Green,Filled = TRUE);
plot(f3,f5,f6);

至此,想要画阴影线区域的目的都可以达到了。本课题结束。

“Matlab之Mupad散点画线并填充斜线阴影”的4个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注