6.3MATLAB学习笔记之图形对象句柄-低层绘图操作

低层绘图操作

MATLAB 将曲线、曲面、文本等图形均视为对象,通过句柄设置这些对象的属性,从而绘 制出更具个性化的图形。

一、曲线对象

曲线对象是坐标轴的子对象,它既可以定义在二维坐标系中,也可以定义在三维坐标系中。 建立曲线对象使用line 函数,其调用格式如下:

句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,…)

其中,对x 、y 、z 的解释与高层曲线函数 plot 和 plot3 等一样,其余参数的解释与前面介绍过 的 figure和 axes函数类似。

每个曲线对象也具有很多属性。除公共属性外,其他常用属性如下。

(1)Color 属性:该属性的取值是代表某颜色的字符或RGB 值,用于定义曲线的颜色,默认值为当前坐标轴对象的ColorOrder 属性定义的颜色。

(2)LineStyle 属性:定义线型,默认值为-,即实线。

(3)LineWidth属性:定义线宽,默认值为0.5磅。

(4)Marker属性:定义数据点标记符号,默认值为’none’。

(5)MarkerSize属性:定义数据点标记符号的大小,默认值为6磅。

(6)XData、YData、ZData 属性:3种属性的取值都是数值向量或矩阵,分别代表曲线对象的3个坐标轴数据。

例1 利用曲线对象绘制曲线
y = s i n ( 2 π t ) 和 y = 3 2 e − 4 t s i n ( 4 3 t + π 3 ) y=sin(2\pi t)和y=\frac{\sqrt3}{2}e^{-4t}sin(4\sqrt3t+\frac{\pi}{3}) y=sin(2πt)y=23 e4tsin(43 t+3π)
程序如下:

t=0:pi/100:pi/2;
y1=sin(2*pi*t);
y2=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3)*t+pi/3);
axes('GridLineStyle',':','XLim',[0,pi/2],'YLim',[-1,1])
line('XData',t,'YData',y1,'LineWidth',1)
line(t,y2)
grid on

程序运行结果如图所示。

untitled

图 利用曲线对象绘制曲线

二、曲面对象

曲面对象也是坐标轴的子对象,它定义在三维坐标系中,而坐标系可以在任何视点下。建立曲面对象使用surface 函数,其调用格式如下:

句柄变量=surface(x,y,z, 属性名1,属性值1,属性名2,属性值2,…)

其中,对x 、y 、z 的解释与高层曲面函数mesh 和 surf 等一样,其余参数的解释与前面介绍过 的 figure和 axes等函数类似。

每个曲面对象也具有很多属性。除公共属性外,其他常用属性如下:

(1)EdgeColor 属性:该属性的取值是代表某颜色的字符或RGB 值,还可以是’flat’ 、‘interp’ 或’none’, 默认为黑色。定义曲面网格线的颜色或着色方式。

(2)FaceColor 属性:该属性的取值是代表某颜色的字符或 RGB 值,还可以是’flat (默认 值)、‘interp’或’none’ 。定义曲面网格片的颜色或着色方式。

(3)LineStyle 属性:定义曲面网格线的线型,默认为实线。

(4)LineWidth 属性:定义曲面网格线的线宽,默认值为0.5磅。

(5)Marker属性:定义曲面数据点标记符号,默认值为’none’。

(6)MarkerSize 属性:定义曲面数据点标记符号的大 小,默认值为6磅。

(7)XData、YData、ZData 属性:3种属性的取值都是 数值向量或矩阵,分别代表曲面对象的3个坐标轴数据。

例2 利用曲面对象绘制三维曲面z=sinycosx。

x=0:0.1:2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
axes('view',[-37.5,30])
hs=surface(x,y,z,'FaceColor','w','EdgeColor','flat');
grid on
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis')
title('mesh-surf')
pause
set(hs,'FaceColor','flat')

untitled
在这里插入图片描述

三、文本对象

文本对象主要用于给图形添加文字标注。在文本对象中除使用一般的文本以外,还允许使 用 LaTeX 字符。

使用text 函数可以根据指定位置和属性值添加文本说明,并保存句柄。

该函数的调用格式 如下:

句柄变量=text(x,y,z, 说明文字,属性名1,属性值1,属性名2,属性值2,…)

其中,说明文字中除使用标准的 ASCII 字符外,还可使用LaTeX 格式的控制字符。例如:

>>h=text(0.5,0.5,'{\gamma}={\rho}^2'); 

将得到标注效果:

γ=

除公共属性外,文本对象的其他常用属性如下。

(1)Color 属性:定义文本对象的显示颜色,默认为黑色。

(2)String 属性:该属性的取值是字符串或字符串矩阵,它记录着文字标注的内容。

(3)Interpreter 属性:该属性的取值是’tex’ (默认值)或’none’, 该属性控制对文字标注内容 的解释方式,即LaTeX 方式或ASCII 方式。

(4)FontSize 属性:定义文本对象的大小,其默认值为10磅。

(5)Rotation 属性:该属性的取值是数值量,默认值为0。它定义文本对象的旋转角度,取

正值时表示逆时针方向旋转,取负值时表示顺时针方向旋转。

例3 利用曲线对象绘制y=sinθ 和 y=cosθ 并利用文字对象完成标注。

程序如下:

theta=-pi:.1:pi;
y1=sin(theta);
y2=cos(theta);
h=line(theta,y1,'LineStyle',':','Color','g');
line(theta,y2,'LineStyle','--','Color','b')
xlabel('-\pi \leq \theta \leq \pi')
ylabel('sin\theta')
title('Plot of sin\theta')
text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','FontSize',12)
set(h,'Color','r','LineWidth',2)       %改变曲线1的颜色和线宽

untitled

四、 其他核心对象

1.区域块对象

**区域块对象是指一个任意多边形区域。**在MATLAB中,可以使用 patch 函数创建一个或多个多边形。有两种形式的patch 函数,一种是高级语法形式,另一种是低级语法形式。前者通过指定每个小面的顶点坐标和颜色来创建区域块对象,后者通过指定所有顶点的坐标和各小面 的顶点和颜色来创建。

使用高级语法形式时,patch函数的调用格式如下:

patch(x,y,z,c)

该函数在当前坐标轴中创建二维或三维空间中带填充模式的区域块对象。x 、y 、z 确定顶点坐标。如果x 、y 、z为矩阵,则MATLAB按列创建多个多边形。c 指定每一区域块对象的颜色,它既可以用字符表示,也可以用RGB三元组表示。

例如,下列程序将绘制一个用红色填充的正方形区域。

x=[10,10,25,25];
y=[10,25,25,10]; 
patch(x,y,[1,0,0])

image-20241010171921613

又如,下列程序将生成一个正十边形,其中用黄色填充。

t=0:pi/5:2*pi;
patch(sin(t),cos(t),'y');
axis  equal

image-20241010172013962

patch函数的低级语法格式只接受属性名和属性值配对参数,其调用格式如下:

句柄变量=patch(属性名1,属性值1,属性名2,属性值2,…)

除公共属性外,区域块对象的其他常用属性如下。

(1)Faces 属性:定义各小面的顶点。

(2)Vertices 属性:定义各顶点的坐标。

(3)FaceColor 属性:该属性的取值是代表某颜色的字符或RGB 值,还可以是flat’ 、‘interp’ 或’none’, 默认为黑色。定义小面的颜色。

(4)EdgeColor 属性:该属性的取值是代表某颜色的字符或RGB 值,还可以是’flat’ 、‘interp’ 或’none’, 默认为黑色。定义小面边缘的颜色。

(5)FaceVertexCData 属性:定义用Faces/Vertices 方法所需要的颜色数据,其值是元素为 RGB值的n×3 矩阵。

例如,绘制一个用红色填充的正方形区域,可使用patch函数的低级形式,程序如下:

vert=[10,10;10,25;25,25;25,10];
fac=[1,2,3,4];
patch('Faces',fac,'Vertices',vert,'FaceColor','r');

为说明patch函数的用法,下面用它两种不同的格式来绘制一个由4个小面组成的扇面。

首先通过小面顶点坐标和颜色进行创建,用x 、y 、z 定义小面的顶点坐标,用c 定义小面的颜 色,程序如下:

x=[0,0,0,0;1,0.8,0.5,0;1,1,0.8,0.5]; 
y=[0,0,0,0;0.5,0.8,1,1;0,0.5,0.8,1];
z=[0.5,0.5,0.5,0.5;1.5,1.5,1.5,1.5;1.5,1.5,1.5,1.5]; 
mc=jet(4);     %定义色图矩阵
c(1,1,1:3)=mc(1,:);
c(1,2,1:3)=mc(2,:);  
c(1,3,1:3)=mc(3,:);  
c(1,4,1:3)=mc(4,:); 
patch(x,y,z,c);  
axis([0,1,0,1,0,2]); 
grid

命令执行后,生成图所示的由4个小三角形组成的扇面。

image-20241010172251290

下面使用patch 函数的第二种格式,用vert定义各顶点的坐标,用fac定义组成各小面的顶点的编号。程序如下:

>> vert=[0,0,0.5;1,0,1.5;1,0.5,1.5;0.8,0.8,1.5;0.5,1,1.5;0,1,1.5];
>> fac=[1,3,2;1,4,3;1,5,4;1,6,5];
>> mc=jet(4);
>> patch('Faces',fac,'Vertices',vert,'FaceVertexCData',mc,'FaceColor','Flat');
>> axis([0,1,0,1,0,2]); 
>> grid

命令执行后,生成与上图相同的图形。采用第2种格式建立区域块时,需要的数据更少,多个小面的公共顶点只需定义一次就够了,所以对于有多个小面的区域块更合适。

例4 绘制两个相互垂直且直径相等的圆柱体的交线。

作图时,常常需要改变曲线的属性,例如线宽、颜色、线型等。如果对多根曲线做同样的 操作可能是很繁琐的,下面的函数可以简化操作。

%PLINE  绘制给定点和属性的直线。
%   pline(P,w,c,s)是绘制直线的函数
%   直线的坐标在矩阵P中描述,宽度是w,颜色是c,线型是s
%   对于二维曲线,矩阵P的格式如下:
%   [x1  x2  …  xn
%    y1  y2  …  yn]
%   其中 x1、y1是坐标的第一个点,其余坐标点类推。三维曲线相应改为3行
function pline(P,w,c,s)
[m,n]=size(P);
if m==2                     %二维曲线
    H1=plot(P(1,:),P(2,:));
    set(H1,'Linewidth',w,'Color',c,'LineStyle',s)
elseif m==3                  %三维曲线
    H2=plot3(P(1,:),P(2,:),P(3,:));
    set(H2,'LineWidth',w,'Color',c,'LineStyle',s)
else
    error('输入参数P的维数不正确!')
end

下面是绘制两个相互垂直且直径相等的圆柱体的交线的程序。

%前视图
P0=[0;0];P1=[-5;5];P2=[-13;5];P3=[-13;-5];    %水平圆柱体坐标设置
P4=[13;-5];P5=[13;5];P6=[5;5];
patch([P0(1),P6(1),P5(1),P4(1),P3(1),P2(1),P1(1)],...
    [P0(2),P6(2),P5(2),P4(2),P3(2),P2(2),P1(2)],'y')   %绘制水平圆柱体
axis([-15,30,-27,18]),axis equal,axis off
hold on
P7=[5;15];P8=[-5;15];                              %垂直圆柱体坐标设置
patch([P0(1),P6(1),P7(1),P8(1),P1(1)],...
    [P0(2),P6(2),P7(2),P8(2),P1(2)],'g')         %绘制垂直圆柱体
pline([P0,P1,P2,P3,P4,P5,P6,P0],2.5,'k','-')   %绘制水平圆柱体的外围线
pline([P6,P7,P8,P1],2.5,'k','-')                 %绘制垂直圆柱体的外围线
%侧视图
r=5;                                                   %两个圆柱体的半径
t=0:pi/100:2*pi;
x=23+r*cos(t);y=r*sin(t);                          %水平圆柱体坐标设置
patch(x,y,'y')                                       %绘制水平圆柱体
P11=[28;0];P12=[28;15];P13=[18;15];P14=[18;0]; %垂直圆柱体坐标设置
t=0:pi/100:pi;
x1=23+r*cos(t);y1=r*sin(t);
patch([x1,P11(1),P12(1),P13(1),P14(1)],...
    [y1,P11(2),P12(2),P13(2),P14(2)],'g')        %绘制垂直圆柱体
pline([x;y],2.5,'k','-')                     %绘制水平圆柱体的外围线
pline([P11,P12,P13,P14],2,'k','-')      %绘制垂直圆柱体的外围线
%轴线
ha=plot([-14,29],[0,0],'k-.');              %绘制水平轴
ha.LineWidth=1.5;
ha=plot([0,0],[-6,16],'k-.');            %绘制前视图的垂直轴
ha.LineWidth=1.5;
ha=plot([23,23],[-6,16],'k-.');       %绘制侧视图的垂直轴
ha.LineWidth=1.5;
%标题及标注
ht=title('两个圆柱体的交线');
ht.FontSize=12;
ht=text(-3,-10,'水平圆柱体:y^2+z^2=r^2');
ht.FontSize=12;
ht=text(-3,-15,'垂直圆柱体:x^2+y^2=r^2');
ht.FontSize=12;
ht=text(-3,-20,'交线的投影:z^2-x^2=0');
ht.FontSize=12;
hold off

image-20241010172950707

2.方框对象

在 MATLAB 中,矩形、椭圆以及两者之间的过渡图形,如圆角矩形都称为方框对象。创建方框对象的低层函数是rectangle,其调用格式如下:

句柄变量=rectangle (属性名1,属性值1,属性名2,属性值2, …)

除公共属性外,方框对象的其他常用属性如下。

(1)Position 属性:与坐标轴的Position 属性基本相同,相对坐标轴原点定义方框的位置。 该属性的取值格式为[x,y,w,h]),(x,y) 确定方框对象的左下角坐标,w 、h 分别指定方框的宽 和高。

(2)Curvature 属性:定义方框边的曲率。该属性指定曲率,其取值格式为[x,y], 其中x为水平曲率,y 为垂直曲率。当值为[0,0]时,创建矩形;当值为[1,1]时,创建椭圆。如果只指定一个值,则水平边和垂直边都会发生相同长度的弯曲。曲率的大小由短的边确定。

不带任何参数的rectangle函数绘制一个单位正方形,左下角坐标为[0,0],右上角坐标为[1, 1],曲率为[0,0]

(3)LineStyle 属性:定义线型,默认为实线。

(4)LineWidth属性:定义线宽,默认值为0.5磅。

(5)EdgeColor 属性:定义边框线的颜色,默认为黑色。

(6)FaceColor 属性:定义填充颜色,默认值为’none’。

例5 在同一个图形窗口中创建矩形、圆角矩形、椭圆和圆各一个,并使用不同的线型和线宽。

程序如下:

subplot(2,2,1)
rectangle('Position',[2,3,25,15],'LineWidth',3)
subplot(2,2,2)
rectangle('Position',[3,5,15,8], 'Curvature',0.4,'LineWidth',2)
subplot(2,2,3)
rectangle('Position',[5,3,10,15],'Curvature',[1,1])
subplot(2,2,4)
rectangle('Position',[5,3,10,10],'Curvature',[1,1],...
      'LineStyle','--','FaceColor','r')
axis equal
subplot(2,2,1)
rectangle('Position',[2,3,25,15],'LineWidth',3)
subplot(2,2,2)
rectangle('Position',[3,5,15,8], 'Curvature',0.4,'LineWidth',2)
subplot(2,2,3)
rectangle('Position',[5,3,10,15],'Curvature',[1,1])
subplot(2,2,4)
rectangle('Position',[5,3,10,10],'Curvature',[1,1],...
      'LineStyle','--','FaceColor','r')
axis equal

image-20241010173420213

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值