龙柏生活圈
欢迎来到龙柏生活圈,了解生活趣事来这就对了

首页 > 百科达人 正文

matlab中circle函数(用MATLAB绘制圆形:circle函数简介)

jk 2023-07-17 12:52:35 百科达人996

用MATLAB绘制圆形:circle函数简介

在MATLAB中绘制图形是一种基本的操作,而常见的图形中圆形是一个常见的图案。MATLAB中提供了circle函数用于绘制圆形,可以方便地完成圆形的绘制工作。本文将为读者介绍MATLAB的circle函数,包括其语法、使用方法,以及常见的应用案例。

circle函数基本语法

circle函数是MATLAB常用的绘图函数之一,其语法如下:

circle(X,Y,r)

其中,X,Y分别表示圆心的横、纵坐标,r为圆的半径。这里的X、Y可以是一个标量,也可以是一个向量或矩阵,表示一组圆心坐标。

circle函数默认绘制的圆是黑色的实心圆,但我们可以通过设置线条颜色和线型等属性,变换圆的样式。例如,为了绘制蓝色的线型圆,我们可以使用以下语句:

circle(X,Y,r,'color','blue','linestyle',':')

circle函数的使用方法

为了演示circle函数的使用方法,我们来看一个简单的例子:如何绘制一个在坐标轴中心的半径为5的圆?首先在Matlab命令窗口输入以下代码:

% plot a circle with radius 5
circle(0,0,5)

在执行这个语句之后,Matlab绘制出了一个以坐标原点为圆心,半径为5的圆形。如下图所示:

\"绘制一个圆\"

circle函数不仅可以绘制单个圆形,还可以绘制多个圆形。例如,以下代码可以绘制三个半径不同的圆形,分别以点(x1,y1)、点(x2,y2)、点(x3,y3)为圆心:

x1 = -2; y1 = 2; r1 = 3;
x2 = 1; y2 = 1; r2 = 2;
x3 = 3; y3 = -1; r3 = 1;
figure; hold on;
circle(x1,y1,r1);
circle(x2,y2,r2);
circle(x3,y3,r3,'color','r');

执行这段代码,我们得到如下的图像:

\"绘制多个圆\"

常见的circle函数应用

下面,我们给出circle函数在常见应用中的用法。这里以绘制车轮为例,介绍如何使用MATLAB绘制一个真实感强的车轮模型。

绘制一个简单的车轮

介绍完circle函数的基本用法之后,我们开始构造一个简单的车轮模型。

下面的代码可以绘制车轮的基本形状,其中半径为20,宽度为10。绘制车轮最简单的方式是使用两个圆形,一个黑色的实心圆表示内轮毂,一个灰色的实心圆表示外轮毂。为了使车轮更真实,我们使用线段绘制出黑色的轮辐。

figure; hold on;
theta = linspace(0,2*pi,13);
r1 = 20;
r2 = 30;
w = 10;
[x1,y1] = pol2cart(theta,r1);
[x2,y2] = pol2cart(theta,r2);
% 绘制内轮毂和外轮毂
circle(0,0,r1,'color','k','linewidth',2);
circle(0,0,r2,'color',[.8 .8 .8],'linewidth',2);
% 绘制轮辐
line([x1; x2],[y1; y2],'color','k','linewidth',3);
axis equal;
axis off;

执行这个语句,我们得到如下的图形:

\"绘制一个简单的车轮\"

绘制详细的车轮模型

上一节中绘制的车轮模型比较简陋,缺乏细节。接下来,我们将进行多次迭代,逐渐完善车轮模型的细节。

首先,我们在内外两个圆形之间添加一些灰色的细线,以模拟轮辋。

circle(0,0,r1,'color','k','linewidth',2);
circle(0,0,r2,'color',[.8 .8 .8],'linewidth',2);
% 绘制轮辐
line([x1; x2],[y1; y2],'color','k','linewidth',3);
% 绘制车轮辋
theta1 = linspace(0,2*pi,41);
theta2 = linspace(pi/4,2*pi+pi/4,41);
[x1,y1] = pol2cart(theta1,r1+w/2);
[x2,y2] = pol2cart(theta1,r2-w/2);
[x3,y3] = pol2cart(theta2,r1+w/2);
[x4,y4] = pol2cart(theta2,r2-w/2);
line([x1; x2],[y1; y2],'color',[.8 .8 .8],'linewidth',1);
line([x3; x4],[y3; y4],'color','k','linewidth',1);

执行上述代码得到的图像如下:

\"绘制一个简单的车轮\"

接下来,我们在车轮上加入些刻痕,用以模拟使用后的磨损。我们可以使用一些随机的线段,来模拟车轮外侧的痕迹。

x = linspace(0,2*pi,400);
y = sin(x)+cos(2*x);
y(y<0) = 0;
y = y/2;
y = y*20-10;
threshold = 10;
mask = abs(y) >= threshold;
x = x+rand(size(x))*0.02;
for i = 1:length(x)-1
    if mask(i) == 1 || mask(i+1) == 1
        line([cos(x(i)) cos(x(i+1))]*r2, [sin(x(i)) sin(x(i+1))]*r2,...
            'color','k','linewidth',1+rand);
    end
end

执行这个代码,我们得到一个包含痕迹的轮子:

\"绘制一个简单的车轮\"

完善汽车轮毂的细节

现在我们开始完善轮毂的细节。首先,我们给内侧的辐条添加亮色的高光。添加高光的方式是在原有辐条的内侧,使用一个白色的线段,用以模拟反射的光亮效应。

theta1 = linspace(0,2*pi,13);
theta2 = linspace(pi/6,2*pi+pi/6,13);
r1 = 20;
r2 = 30;
w = 10;
% 绘制内轮毂和外轮毂
circle(0,0,r1,'color','k','linewidth',2);
circle(0,0,r2,'color',[.8 .8 .8],'linewidth',2);
% 绘制轮辐
line([cos(theta1); cos(theta2)]*r1, [sin(theta1); sin(theta2)]*r1,...
    'color',[.7 .7 .7],'linewidth',2);
line([cos(theta1); cos(theta2)]*r2, [sin(theta1); sin(theta2)]*r2,...
    'color',[.7 .7 .7],'linewidth',2); 
% 添加亮色高光
theta1_b = theta1 - pi/20;
theta2_b = theta2 + pi/20;
line([cos(theta1_b); cos(theta2_b)]*(r1-4), [sin(theta1_b); sin(theta2_b)]*(r1-4),...
    'color','w','linewidth',1);
line([cos(theta1); cos(theta2)]*r1, [sin(theta1); sin(theta2)]*r1,...
    'color',[.7 .7 .7],'linewidth',2);

执行上述代码,我们得到一个完整的轮毂模型:

\"完整的车轮模型\"

在MATLAB中构造一个模型

在上面的例子中,我们逐渐完善并绘制出了一个车轮模型。读者可以在此基础上进一步尝试设计汽车、火车等模型,甚至是一些想象中的虚构模型。

下面我们提供一个车身模型的代码(仅供参考):

x = linspace(-20,20,300);
y = linspace(-10,10,300);
[X,Y] = meshgrid(x,y);
X1 = X - sqrt(Y.^2+X.^2)./2;
X2 = X + sqrt(Y.^2+X.^2)./2;
Z1 = 5*sin(sqrt(Y.^2+(X1+5).^2))-sqrt(Y.^2+(X1+5).^2)/6;
Z2 = 5*sin(sqrt(Y.^2+(X2-5).^2))-sqrt(Y.^2+(X2-5).^2)/6;
Z = max(Z1,Z2);
figure; hold on;
surf(X,Y,Z,'edgecolor','none','facecolor',[.9 .9 .9]);
alpha 0.8;
axis equal;
axis off;
view(44,20);
axis([-30 30 -20 20 0 20]);
% 绘制四个车轮
x1 = -10; y1 = -10;
x2 = 10; y2 = -10;
x3 = -10; y3 = 10;
x4 = 10; y4 = 10;
z = 0;
r = 5.5;
w = 2.5;
h = 1;
circle(x1,y1,r,'color','k','linewidth',2);
circle(x2,y2,r,'color','k','linewidth',2);
circle(x3,y3,r,'color','k','linewidth',2);
circle(x4,y4,r,'color','k','linewidth',2);
line([0,0],[y1+r,y1+r+h],'color','k','linewidth',2);
line([0,0],[y2+r,y2+r+h],'color','k','linewidth',2);
line([x1+r+h,x1+r+h],[0,0],'color','k','linewidth',2);
line([x3+r,x3+r+h],[0,0],'color','k','linewidth',2);
theta1 = linspace(0,2*pi,13);
theta2 = linspace(pi/6,2*pi+pi/6,13);
[xc1,yc1] = pol2cart(theta1,r+w/2);
[xc2,yc2] = pol2cart(theta1,r-w/2);
[xc3,yc3] = pol2cart(theta2,r+w/2);
[xc4,yc4] = pol2cart(theta2,r-w/2);
line([xc1; xc2],[yc1; yc2]+y1,'color',[.8 .8 .8],'linewidth',1);
line([xc1; xc2],[yc1; yc2]+y2,'color',[.8 .8 .8],'linewidth',1); 
line([xc3; xc4]+x1,[yc3; yc4],'color','k','linewidth',1.5);
line([xc3; xc4]+x2,[yc3; yc4],'color','k','linewidth',1.5); 
line([xc1; xc2],[yc1; yc2]+y3,'color',[.8 .8 .8],'linewidth',1); 
line([xc1; xc2],[yc1; yc2]+y4,'color',[.8 .8 .8],'linewidth',1); 
line([xc3; xc4]+x3,[yc3; yc4],'color','k','linewidth',1.5);
line([xc3; xc4]+x4,[yc3; yc4],'color','k','linewidth',1.5);

执行上述代码,我们得到如下的3D车身模型:

\"3D车身模型\"

总结

本文介绍了MATLAB中常用的circle函数的使用方法。我们从圆形基本语法出发,逐渐介绍了如何演示出一组坐标点的圆和多个圆和花式的车轮模型,最后,我们进一步构建了一个3D图形模型。

在MATLAB中图形最重要的是形式,我们可以采用多种方法达到绘制图片的目的,例如使用一些creativity来画出自己所想的模型,这也是MATLAB的魅力所在。

猜你喜欢