MATLAB绘制圆、椭圆、矩形等基本平面图形

MATLAB绘制圆、椭圆、矩形等基本平面图形

MATLAB绘制基本平面图形

**画线的方法*****rectangle函数****画矩形的方法****旋转矩形的方法****画圆的方法****画圆弧的方法****画椭圆的方法****画椭圆弧的方法****画多边形的方法****♥三角形****♥梯形****♥六边形**

**画爱心的方法****♥平面爱心****♥立体爱心**

画线的方法

plot([1 6],[3 3],'r','linewidth',1.5);%与x轴平行的直线

hold on

plot([5 5],[3 7],'b','linewidth',2);%与y轴平行的直线

hold on

plot([2 4],[3 7],'k','linewidth',2);%斜线

axis equal

*rectangle函数

函数功能: 该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充,其默认位置是[0,0,1,1] ,默认曲率是 [0,0](也就是说,没有曲率)。 调用格式:

rectangle(‘Position’,[x,y,w,h]); %在指定位置绘制矩形,其中x,y为矩形左下角坐标,w,h分别为矩形的长和宽。

rectangle(…,‘Curvature’,[x,y]); %指定矩阵边的曲率,可以使它从矩形到椭圆不同变化,水平曲率x为矩形宽度的分数,是沿着矩形的顶部和底部的边进行弯曲。竖直曲率y为矩形高度的分数,是沿着矩形的左面和右面的边进行弯曲。x和y取值范围是从0(无曲率)到1(最大曲率)。值[0,0]绘制一个成直角的矩形,值[x,y]绘制一个椭圆。如果仅仅指定曲率的一个值,那么在水平曲率和竖直曲率都有相同的值。

‘edgecolor’,‘r’ 表示边框颜色是红色; ‘facecolor’,‘g’ 表示面内填充颜色为绿色。

画矩形的方法

利用rectangle函数,曲率设置为0。

rectangle('Position',[-20 -10 40 20],'edgecolor','k','facecolor','g','linewidth',1.8)

axis equal

旋转矩形的方法

hg = hgtransform;

rectangle('Position',[0,0,40,20],'Curvature',[0 0],'edgecolor','k','facecolor','y','parent',hg,'linewidth',2)

hg.Matrix = makehgtform('zrotate',pi/6); % 绕原点(z轴)逆时针旋转60°

axis equal

画圆的方法

♡第一种: 利用rectangle函数,曲率设置为1。

r = 150;%半径

a = 150;%圆心横坐标

b = 150;%圆心纵坐标

para = [a-r, b-r, 2*r, 2*r];

rectangle('Position', para, 'Curvature', [1 1],'EdgeColor', 'r');

axis equal

♡第二种: MATLAB里自带的工具

viscircles([0 0],150,'Color','b');%圆心坐标为(0,0),半径为150,轮廓颜色为蓝色

♡第三种: 利用圆的参数方程

r = 150;%半径

a = 150;%圆心横坐标

b = 150;%圆心纵坐标

theta=0:0.1:2*pi;

x=a+r*cos(theta);

y=b+r*sin(theta);

plot(x,y,'g','linewidth',1);

axis equal

画圆弧的方法

利用圆的参数方程,改变角度值,即可改变圆弧长度。

r=60;%半径

a=150;%圆心横坐标

b=25;%圆心纵坐标

theta=pi:0.01:2*pi;%180度到360度的圆弧

x=a+r*cos(theta);

y=b+r*sin(theta);

plot(x,y,'k','linewidth',2);

axis equal

画椭圆的方法

♡第一种: 利用rectangle函数,曲率设置为1。

rectangle('Position',[0,0,6,4],'Curvature',[1 1],'edgecolor','k','facecolor','g','linewidth',2);

axis equal

♡第二种: 利用椭圆定义

Num=1000;

cicle=zeros(Num,2);

a=60;%长半轴

b=30;%短半轴

for i=1:Num

theta=-pi+i/Num*2*pi;

dOP=a*b/sqrt(a^2*sin(theta)^2+b^2*cos(theta)^2);

cicle(i,:)= dOP*[cos(theta) sin(theta)];

end

plot(cicle(:,1)+80,cicle(:,2)-150,'k','linewidth',2);

fill(cicle(:,1)+80,cicle(:,2)-150,'g');%填充颜色

axis equal

♡第三种: 利用椭圆的参数方程

a=150;%圆心横坐标

b=150;%圆心纵坐标

c=60;%长半轴

d=40;%短半轴

theta=0:0.1:2*pi;

x=a+c*cos(theta);

y=b+d*sin(theta);

plot(x,y,'g','linewidth',2);

axis equal

画椭圆弧的方法

利用椭圆的参数方程,改变角度值,即可改变椭圆弧长度。

a=150;%圆心横坐标

b=150;%圆心纵坐标

c=60;%长半轴

d=40;%短半轴

theta=pi:0.1:2*pi;

x=a+c*cos(theta);

y=b+d*sin(theta);

plot(x,y,'g','linewidth',2);

axis equal

画多边形的方法

♥三角形

每个数据点用小圆圈表示,且各个数据点之间用实线连接。

x=10*rand(1,3); y=10*rand(1,3);

for i=1:length(x)

for j=1:length(y)

line([x(i),x(j)],[y(i),y(j)],'linewidth',2); %连接所有节点

hold on;

end

end

plot(x,y,'ro','linewidth',2); %画节点line([x1,x2]

♥梯形

将各个点的坐标保存在数组中,用plot函数画出图形。坐标矩阵的最后需要重复起始点坐标。

xL=[-71 -34 -45 -71];

yL=[-46 -77 -88 -65];

plot(xL,yL,'k','linewidth',2);

fill(xL,yL,d);

♥六边形

将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第一个点连接。坐标矩阵的最后不需要重复起始点坐标。

a=[0 2 4 6 4 2;0 2 2 0 -2 -2]; %要连接的点坐标 x;y

[n,m]=size(a);

for i=1:m-1

line([a(1,i),a(1,i+1)],[a(2,i),a(2,i+1)],'linewidth',2); %连接节点line([x1,x2],[y1,y2])

hold on

end

hold on

line([a(1,1),a(1,m)],[a(2,1),a(2,m)],'linewidth',2); %首尾节点相连

plot(a(1,:),a(2,:),'ro','linewidth',2); %画所有节点

例子:左脚丫

xL1=[-22 -22];

yL1=[-164 -172];

theta=4*pi/9:0.1:4*pi/3;%圆弧

xL2=-37+8*cos(theta);

yL2=-179.07+8*sin(theta);

xL3=[-41 -2 -2 -22];

yL3=[-186 -186 -164 -164];

xL=[xL1 xL2 xL3];

yL=[yL1 yL2 yL3];

plot(xL,yL,'k');

fill(xL,yL,'k');

axis equal

画爱心的方法

♥平面爱心

♡第一种:

subplot(121);

x=linspace(-2,2,1000);

y1=sqrt(2*sqrt(x.^2)-x.^2);

y2=-2.14*sqrt(sqrt(2)-sqrt(abs(x)));

plot(x,y1,'b',x,y2,'b');

axis([-2.5,2.5,-3,1.5]);

subplot(122);

t=linspace(-3,3,100);

x=16*(sin(t)).^3;

y=-28+13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);

plot(x,y,'k','linewidth',2);%画爱心

fill(x,y,'r');

axis equal

♡第二种:

subplot(131);ezplot('x^2+(y-(x^2)^(1/3))^2=9');

subplot(132);ezplot('-x^2*y^3+(x^2+y^2-1)^3=0',[-1.5,1.5]);

subplot(133);ezplot('17*x.^2-16*abs(x).*y+17*y.^2=200');

♥立体爱心

♡第二种:

subplot(131);

[x,y,z]=meshgrid(linspace(-1.5,1.5));

f=@(x,y,z)(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9/80)*y.^2.*z.^3;

p=patch(isosurface(x,y,z,f(x,y,z),0)); view(3);axis equal

set(p,'FaceVertexCData',jet(size(get(p,'faces'),1)) ,'FaceColor', 'flat', 'EdgeColor', 'none');

subplot(132);

f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3;

[x,y,z]=meshgrid(linspace(-3,3));

val=f(x,y,z);

[p,v]=isosurface(x,y,z,val,0);

patch('faces',p,'vertices',v,'facevertexcdata',jet(size(v,1)),'facecolor','w','edgecolor','flat');

view(3);grid on;axis equal;

subplot(133);

f=@(x,y,z)(x.^2+ (9./4).*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3;

[x,y,z]=meshgrid(linspace(-1.5,1.5));

val=f(x,y,z);

isosurface(x,y,z,val,0);

axis equal;view(3);colormap([1 0.2 0.2]);

相关文章