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

画线的方法

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]);
  • 64
    点赞
  • 404
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值