利用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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
Python logging模块学习笔记
May 24 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python3读取zip文件信息的方法
May 22 Python
详解详解Python中writelines()方法的使用
May 25 Python
Python科学画图代码分享
Nov 29 Python
Python3计算三角形的面积代码
Dec 18 Python
django中send_mail功能实现详解
Feb 06 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
实时获取Python的print输出流方法
Jan 07 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
使用python制作一个解压缩软件
Nov 13 Python
Flask response响应的具体使用
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
You might like
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
python 七种邮件内容发送方法实例
2014/04/22 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
教师节学生演讲稿
2014/09/03 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
三潭印月的导游词
2015/02/12 职场文书
mysql 获取时间方式
2022/03/20 MySQL