先放一张三维球体旋转图形效果图

该图形旋转主要用到了圆的参数方程和空间几何变换矩阵。
1. 画出球形
为了画出一个圆形,圆形的参数方程为:

y=y0+r×cos(θ) y = y 0 + r × c o s ( θ )

y=y0+r\times cos(\theta)

z=z0+r×sin(θ) z = z 0 + r × s i n ( θ )

z=z0+r\times sin(\theta)
其中 (y0,z0) ( y 0 , z 0 ) (y0,z0)是圆心, r r r是半径。这样在yoz" role="presentation">yozyozyoz平面就能画出一个圆了。现在要画在三维坐标下,所以我们只需要增加一个固定 x0 x 0 x0坐标,就可以画出圆心在 (x0,y0,z0) ( x 0 , y 0 , z 0 ) (x0,y0,z0),半径为 r r r,平行于yoz" role="presentation">yozyozyoz的圆了。为了简化一点,我们把球心坐标定为 (0,0,0) ( 0 , 0 , 0 ) (0,0,0), 在 x x x轴方向上画出等间距的若干圆,并且使他们的r和x0满足三角关系

r=R2−x02" role="presentation">r=R2−x02−−−−−−−√r=R2−x02

r = \sqrt{R^2 - x0^2}
R R R为球体半径,x0" role="presentation">x0x0x0为到 yoz y o z yoz的距离,r为圆的半径。
2.旋转
旋转用到了三维空间的几何变换,三维空间几何变换包括平移,旋转,缩放等操作,这里只用到了绕z轴旋转。旋转矩阵为

T=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪cos(θ)sin(θ)00−sin(θ)cos(θ)0000100001 ⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪ T = { c o s ( θ ) − s i n ( θ ) 0 0 s i n ( θ ) c o s ( θ ) 0 0 0 0 1 0 0 0 0 1 }

T= \left\{\begin{matrix}cos(\theta) & -sin(\theta) & 0 &0\\sin(\theta) & cos(\theta) & 0 &0\\0 & 0 & 1 &0\\0 & 0 & 0 &1\\end{matrix}\right\}
变换时左乘以变换矩阵

⎧⎩⎨⎪⎪⎪⎪⎪⎪x′y′z′1 ⎫⎭⎬⎪⎪⎪⎪⎪⎪=T⎧⎩⎨⎪⎪⎪⎪⎪⎪xyz1 ⎫⎭⎬⎪⎪⎪⎪⎪⎪ { x ′ y ′ z ′ 1 } = T { x y z 1 }

\left\{\begin{matrix}x'\\ y'\\ z'\\1\\end{matrix}\right\}=T\left\{\begin{matrix}x\\ y\\ z\\1\\end{matrix}\right\}
3.代码实现
先写一个画圆的函数方便调用

% function name:getCirclePoints
% input:
%     - r 圆的半径
%     - x0 y0 z0 圆的圆心
% output:
%     - x y z 坐标点向量
function [x,y,z] = getCirclePoints(r,x0,y0,z0)
theta = 0: 0.01*pi: 2*pi;      %角度0-2pix = x0*ones(1,length(theta)); %计算坐标y = y0 + r*cos(theta);z = z0 + r*sin(theta);
end 

主程序

clc,clear
x0 = -7 : 0.5 : 7;          %圆的横坐标
y0 = 0; z0 = 0;
R = 7*ones(1,length(x0));   %球半径
r = sqrt(R.^2 - x0.^2);     %圆半径
theta = 0 : 0.01*pi : 2*pi; %旋转角度为一圈
pic_num = 1;
for k = 1:length(theta)x = []; y =[]; z = [];
%     计算画一个球体坐标for i = 1:length(r)     [xt,yt,zt] = getCirclePoints(r(i),x0(i), y0, z0);x = [x xt];y = [y yt];z = [z zt];endcoordinate = [x;y;z;ones(1,length(x))]; %增加一行1T = [cos(theta(k)),-sin(theta(k)),0,0; sin(theta(k)),cos(theta(k)),0,0; 0,0,1,0; 0,0,0,1]; %绕z旋转矩阵coordinate = T*coordinate;%旋转变换figure(1)plot3(coordinate(1,:),coordinate(2,:),coordinate(3,:),'.'); %画出图形axis equal %等间距,不然看起来可能是瘪的axis([-10 10 -10 10 -10 10])view([20,0,0])  %设置观察视角 %下面是保存成GIF动画drawnow;F=getframe(gcf);I=frame2im(F);[I,map]=rgb2ind(I,256);if pic_num == 1imwrite(I,map,'global.gif','gif', 'Loopcount',inf,'DelayTime',0.1);elseimwrite(I,map,'global.gif','gif','WriteMode','append','DelayTime',0.001);endpic_num = pic_num + 1;
end

如何用Matlab画一个数学动态GIF相关推荐

  1. 数学建模中如何用 matlab画漂亮的图(一)

    数学建模中如何用 matlab画漂亮的图(二维图形) 1 plot绘图命令*** 1.1 plot(x) 当x为实向量时,plot(x)绘制出的曲线,横坐标为该向量的下表,纵坐标为每一个下表位置所对应 ...

  2. matlab画平面心型线,如何用matlab画出心形线

    心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹线.下面就简单讲解一下如何用matlab画出心形线. 1.心形线的数学定义 2.编制的绘制心形线的matlab程序 ...

  3. matlab 中 t=0:t:(n-1)t;k=0:n-1,如何用matlab画出单位脉响应h(n)=sin(n

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:如何用matlab画出单位脉响应h(n)=sin(n回答:n=1:50;%可根据需求调整范围 h(n)=sin(n-10)/(n-1 ...

  4. matlab画一个放大图中图

    matlab画一个放大图中图 1 magnify介绍 2 具体思路 3 具体步骤 4 参考 1 magnify介绍 magnify是个动态放大镜,固化后可以用tools>edit plot移动小 ...

  5. matlab鼠标三维坐标点,请问如何用matlab画三维点,已知x,y,z的坐标,在三维坐标系上显示...

    点击查看请问如何用matlab画三维点,已知x,y,z的坐标,在三维坐标系上显示具体信息 答:例如 : X=1,Y=2,Z=3; 代码就是: plot3(1,2,3,'*') grid on%加网格 ...

  6. 如何用 css 画一个心形

    如何用 css 画一个心形 (How to draw hearts using CSS) 用两个长方形切圆角倾斜位移并合并为一个心形 第一步 画一个长方形 (Draw a rectangle) 这个长 ...

  7. php饼图只有一个小方块_如何用Python画一个好看的饼图

    这是一个关于画一个饼图的故事......话说在一个月黑风高的夜晚,笔者肚子饿了,脑海中回想起画饼充饥的典故,于是打算.... 成功冷到自己...... 好吧进入正题,这次我们来说说怎么用python画 ...

  8. css画心形原理,如何用 css 画一个心形

    如何用 css 画一个心形 (How to draw hearts using CSS) 用两个长方形切圆角倾斜位移并合并为一个心形 第一步 画一个长方形 (Draw a rectangle) 这个长 ...

  9. 如何用python画一个美队盾牌

    如何用python画一个美队盾牌 import turtle# 画一个大圆 turtle.pensize(10) # 用pensize来设置画笔的粗细 turtle.pencolor('red') # ...

最新文章

  1. 【Java】LeetCode 232. 用栈实现队列
  2. python中怎么取两个列表 集合的交集
  3. [云炬创业学笔记]第二章决定成为创业者测试4
  4. 通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署
  5. CSS 常用中文字体的英文名称
  6. pytorch学习笔记(三十七):RMSProp
  7. L1-067 洛希极限 (10 分)-PAT 团体程序设计天梯赛 GPLT
  8. 一个商人应遵守的22条规矩
  9. 后端开发面试自我介绍_java开发面试自我介绍
  10. 自然语言处理 | (30) 文本相似度计算与文本匹配问题
  11. 如何恢复删除好友的微信聊天记录?iPhone手机高效操作方法
  12. 操作系统-课堂笔记-进程概述(南航)
  13. Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage`
  14. 什么是埋点?埋点的意义是什么?有哪些用途?
  15. python中jieba库的安装
  16. 电脑计算机不显示桌面了怎么办,电脑不显示桌面黑屏了 电脑黑屏不显示桌面怎么办 - 云骑士一键重装系统...
  17. 易启秀20150629完整包微场景制作源码,新增1.4G素材包,全新后台UI设计+采集
  18. 工业RFID低频读卡器|AGV车载地标识读器L8820配套标签与配件选型注意事项
  19. [Linux驱动炼成记] 10 -光感ISL29035调试/IIO子系统
  20. ZooKeeper之zoo.cfg配置

热门文章

  1. 魅族mx5android,可能是最好用安卓手机 魅族mx5小技巧分享
  2. 视频教程-Springboot+Vue前后的分离整合项目实战-Java
  3. 树莓派 | 通过网线连接笔记本与树莓派,实现SSH连接,并让树莓派能上网(Internet)
  4. 2021年九月上旬文章推荐
  5. 【我的第一个目标检测课题】3、Retinanet网络的学习与实现+扩展
  6. 气动调节阀的用途安装知识
  7. 笔记-动物病理(炎症)
  8. 如何打造高效的团队(五)- 文化
  9. LeetCode 刷题记录 77. Combinations
  10. 2017.12退役贴