利用Matlab绘制各类特殊图形的实例代码


Posted in Python onJuly 16, 2021

Matlab绘图介绍

强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。

Matlab绘制特殊图形

1. 绘制极坐标图

说明:使用polarplot函数绘制极坐标图,每组数据表示一条闭合曲线,共有20条曲线构成20条封闭同心曲线。

t = linspace(0,2*pi,500);
y = 1+0.3*sin(20*t)+0.1*sin(30*t)+0.1*sin(40*t); 
polarplot(t,y,t,1.1*y,t,1.2*y,t,1.3*y,t,1.4*y,t,1.5*y,t,1.6*y,t,1.7*y,t,1.8*y,t,1.9*y,...
    t,2.0*y,t,2.1*y,t,2.2*y,t,2.3*y,t,2.4*y,t,2.5*y,t,2.6*y,t,2.7*y,t,2.8*y,t,2.9*y,'linewidth',1.5);

利用Matlab绘制各类特殊图形的实例代码

2. 单条曲线绘制分段函数(反比例函数y=1/x)

说明:反比例函数在x接近于0时,趋近于奇异(1/0 趋近于无穷大),使用nan非数对图形进行镂空,可以实现一条曲线绘制y=1/x的整个定义域。

x = linspace(-3,3,500);
f = @(x) 1./x;
y = f(x);
for ii = 1:length(x)
    if  abs(x(ii))<0.03 
        x(ii) = nan;
        y(ii) = nan;
    end
end
plot(x,y)
legend('y=1/x')

利用Matlab绘制各类特殊图形的实例代码

3. 正方体内绘制随机分布的颜色片图

说明: 使用plot3绘制正方体12条边,使用fill3函数绘制颜色片,颜色片位置和填充颜色随机生成。

a = 20;
b = 20;
c = 20;
A1 = [0 0 0
     a 0 0
     a b 0
     0 b 0
     0 0 0];
A2 = [0 0 c
     a 0 c
     a b c
     0 b c
     0 0 c]; 
A3 = [0 0 0
     0 0 c
     0 b c
     0 b 0
     0 0 0]; 
A4 = [a 0 0
     a 0 c
     a b c
     a b 0
     a 0 0];  
% 绘图
figure
hold on
plot3(A1(:,1),A1(:,2),A1(:,3),'k');
plot3(A2(:,1),A2(:,2),A2(:,3),'k');
plot3(A3(:,1),A3(:,2),A3(:,3),'k');
plot3(A4(:,1),A4(:,2),A4(:,3),'k');
view(3)
 
XYZ0 = [0 0 0
        1 0 0
        1 0 1
        0 0 1];
for ii = 1:100
    p = [rand*(a-2) rand*(b-2) rand*(c-2)]+1;    % 球心
    X2=  p(1) + XYZ0(:,1);
    Y2 = p(2) + XYZ0(:,2);
    Z2 = p(3) + XYZ0(:,3);
    ColorSpec = rand(1,3);
    fill3( X2,Y2,Z2,ColorSpec )
end

利用Matlab绘制各类特殊图形的实例代码

4. 在大圆内随机生成若干互不相交的小圆

说明:先绘制大圆,在大圆内随机生成小圆圆心,判断小圆圆心和其它小圆的距离,如果小圆圆心距离小于直径,说明小圆相交,舍去该小圆。

tic
X = [];
Y = [];
n = 0;
while n < 1000
    r = rand * (750-5);
    theta = rand * 2*pi;
    x0 = r*cos(theta);
    y0 = r*sin(theta);
    s = min( (x0-X).^2 + (y0-Y).^2 );   % 最小圆心距离
    if s < 10^2
        continue;
    else
        X = [X;x0];   % 圆心坐标集合
        Y = [Y;y0];  
        n = n +1      % 点数
    end
end
toc
alpha = linspace(0,2*pi,100);
x = 5*cos(alpha);
y = 5*sin(alpha);
 
figure
plot( 150*x,150*y,'r' )
hold on
for ii = 1:n
    x0 = X(ii);
    y0 = Y(ii);
    plot(x0+x,y0+y,'k')
end

利用Matlab绘制各类特殊图形的实例代码

5. 在长方体内随机生成若干球体

说明:patch函数绘制长方体和球体表面,并可填充颜色。

x = 100;
y = 80;
z = 50;
theta = linspace(0,2*pi,50);
phi = linspace(0,2*pi,50);
[theta,phi] = meshgrid(theta,phi);
r = 2;
X0 = r*cos(phi).*cos(theta);
Y0 = r*cos(phi).*sin(theta);
Z0 = r*sin(phi);

% 绘图
X = [0 x x 0 
     0 x x 0
     0 0 0 0
     x x x x
     0 x x 0]';
Y = [0 0 y y
     0 0 y y
     0 y y 0
     0 y y 0
     y y y y]';
Z = [0 0 0 0
     z z z z
     0 0 z z
     0 0 z z
     0 0 z z ]';
figure
patch(X,Y,Z,'r');
view(3)
hold on
for ii = 1:50
    p = [rand*(100-4*r) rand*(80-4*r) rand*(50-4*r)]+2*r;    % 球心
    X2= p(1) + X0;
    Y2 = p(2) + Y0;
    Z2 = p(3) + Z0;
    patch( X2,Y2,Z2,'y' )
end

利用Matlab绘制各类特殊图形的实例代码

6. 绘制圆柱体与球体曲面相交,并绘制相交曲线

说明: mesh函数绘制曲面图,求解方程得到交线参数方程,plot3函数绘制三维交线。

%% 曲面1
t = linspace(0,2*pi,200);
s = linspace(0,2*pi,200);
[t,s] = meshgrid(t,s);
x = 2*cos(t);
y = 2*sin(t).*cos(s);
z = 2*sin(t).*sin(s);
figure
mesh(x,y,z)
%% 曲面2
t2 = linspace(0,2*pi,200);
z2 = linspace(-3,3,200);
[t2,z2] = meshgrid(t2,z2);
x2 = 1 + cos(t2);
y2 = sin(t2);
hold on
mesh(x2,y2,z2)
%% 交线
t3 = linspace(0,2*pi,200);
y3 = sin(t3);
x3 = 1 + cos(t3);
z3 = sqrt(4-2*x3);
plot3(x3,y3,z3,'r','linewidth',5)
hold on
plot3(x3,y3,-z3,'r','linewidth',5)

利用Matlab绘制各类特殊图形的实例代码

8. 绘制三维抛物曲面

说明:使用nan非数对图形进行镂空

x = -20:0.1:20;
y = -20:0.1:20;
[X,Y] = meshgrid(x,y);
p = 0.2;
q = 0.1;
Z = X.^2/(2*p) +  Y.^2/(2*q);
Z = (Z<=500) .* Z + ((Z>500)-1) ./ ((Z>500)-1);   % 图形镂空
mesh(X,Y,Z)

利用Matlab绘制各类特殊图形的实例代码

9. 抛物曲面随参数变化形成动画

说明:每个步长内动态更新绘制三维曲面,形成动画效果。

x = linspace(-1,1,20);
y = linspace(-1,1,20);
[X,Y] = meshgrid(x,y);
figure
a = 1;
Z = a.*X.^2 + Y.^2;
h = surf(X,Y,Z);
zlim([0,15])
for a = 1:0.1:10
    Z = a.*X.^2 + Y.^2;
    set(h,'zdata',Z);
    drawnow
    pause(0.1)
end

利用Matlab绘制各类特殊图形的实例代码

10. 使用不同频率的正弦波合成方波

说明:傅里叶级数,利用不同频率的正弦波合成方波,三角函数项数越多,合成方波越精确。

t=0:0.000001:1;
 f1=6*sin(10*pi*t)/pi;
 f2=6*sin(10*pi*t)/pi+2*sin(30*pi*t)/pi;
 f3=6*sin(10*pi*t)/pi+2*sin(30*pi*t)/pi+6*sin(50*pi*t)/(5*pi);
 %% 循环段
 N = 10;   % 点数
 f4 = 0;   % 初始值
 for ii = 1:N
     f4 = f4 + 3*2*sin((2*ii-1)*10*pi*t)/pi/(2*ii-1);
 end
 figure
 subplot(2,2,1),plot(t,f1)
 subplot(2,2,2),plot(t,f2) 
 subplot(2,2,3),plot(t,f3)
 subplot(2,2,4),plot(t,f4)

利用Matlab绘制各类特殊图形的实例代码

总结

到此这篇关于利用Matlab绘制各类特殊图形的文章就介绍到这了,更多相关Matlab绘制特殊图形内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中__name__的使用实例
Apr 14 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
Python 变量类型详解
Oct 10 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
PyQt实现计数器的方法示例
Jan 18 Python
python批量提取图片信息并保存的实现
Feb 05 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 Python
Flask response响应的具体使用
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
You might like
图书管理程序(二)
2006/10/09 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python代码太长换行的实现
2019/07/05 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
会计专业毕业生自我鉴定
2013/10/29 职场文书
司机的工作范围及职责
2013/11/13 职场文书
保险经纪人求职信
2014/03/11 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
行风评议整改报告
2014/11/06 职场文书
电力工程合作意向书
2015/05/11 职场文书
2015教师节通讯稿
2015/07/20 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript