利用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脚本实现格式化css文件
Apr 08 Python
python xml解析实例详解
Nov 14 Python
Apache如何部署django项目
May 21 Python
python表格存取的方法
Mar 07 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
pandas 读取各种格式文件的方法
Jun 22 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python 多线程串行和并行的实例
Feb 22 Python
Python搭建Spark分布式集群环境
Jul 05 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Flask response响应的具体使用
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
You might like
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python实现字典去除重复的方法示例
2017/07/31 Python
python实现感知器算法(批处理)
2019/01/18 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python二维图制作的实例代码
2020/12/03 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
Linux的文件类型
2012/03/07 面试题
秋季婚礼证婚词
2014/01/11 职场文书
打造完美自荐信
2014/01/24 职场文书
初二生物教学反思
2014/02/03 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
六年级作文之自救
2019/12/19 职场文书
如何用python绘制雷达图
2021/04/24 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS