当前位置: 首页 > news >正文

MATLAB | 绘制博士学位的图解指南

本文图解复刻自Matt Might的《博士学位的图解指南》一文,相关信息如下:

  • 作品名称 : The Illustrated Guide to a Ph.D.
  • 作者 : Matt Might
  • 作者主页 : http://matt.might.net/
  • 原作链接 : http://matt.might.net/articles/phd-school-in-pictures/

知乎大佬白小鱼问我能不能用matlab画出《博士学位的图解指南》一文,我一瞅,这么有意思的东西咋能不水个文章呢hiahiahia,于是就有了这一篇。感谢大佬提供的想法。

动图效果

静态图效果

完整代码

function guide2phd
% 原版图解相关信息:
% 作品名称 : The Illustrated Guide to a Ph.D.
% 作者     : Matt Might
% 作者主页 : http://matt.might.net/
% 原作链接 : http://matt.might.net/articles/phd-school-in-pictures/
% ----------------------------------------------------------------
% MATLAB代码复刻:
% @author : slandarer
% gzh    : slandarer随笔

clc;clear
% 坐标区域基础修饰
ax=gca;hold on
ax.XLim=[-1.1,1.1];
ax.YLim=[-1,1.4];
ax.DataAspectRatio=[1,1,1];
ax.XColor='none';
ax.YColor='none';

% =========================================================================
% 绘制各个图形对象
Ct=linspace(0,2*pi,200);
CL1=plot(cos(Ct),sin(Ct),'Color',[0,0,0],'LineWidth',1,'Visible','off');
% -------------------------------------------------------------------------
[EX1,EY1]=getEllipse([.5,.5]./sqrt(2),.5,.08,pi/4,200);
EF1=fill(EX1,EY1,[241,63,32]./255,'EdgeColor','none','Visible','off');
[EX2,EY2]=getEllipse([.3,.3]./sqrt(2),.3,.07,pi/4,200);
EF2=fill(EX2,EY2,[242,95,79]./255,'EdgeColor','none','Visible','off');
EF3=fill(cos(Ct).*.075+.255./sqrt(2),sin(Ct).*.075+.255./sqrt(2),...
    [244,139,128]./255,'EdgeColor','none','Visible','off');
% -------------------------------------------------------------------------
CF1=fill(cos(Ct).*.255,sin(Ct).*.255,[244,139,128]./255,'LineWidth',1,'EdgeColor','none','Visible','off');
CF2=fill(cos(Ct).*.185,sin(Ct).*.185,[148,211,88]./255,'LineWidth',1,'EdgeColor','none','Visible','off');
CF3=fill(cos(Ct).*.1,sin(Ct).*.1,[0,87,214]./255,'LineWidth',1,'EdgeColor','none','Visible','off');
% -------------------------------------------------------------------------
SL1=fill([-1,-1,1,1].*.15+1/sqrt(2),[-1,1,1,-1].*.15+1/sqrt(2),[0,0,0],...
    'FaceColor','none','LineWidth',1,'LineStyle',':','Visible','off');
% -------------------------------------------------------------------------
[EX4,EY4]=getEllipse([-1,-1],2.01,.32,pi/4,200);
EF4=fill(EX4-.1,EY4-.4,[241,63,32]./255,'EdgeColor','none','Visible','off');
EF5=fill((cos(pi/4)+cos(Ct)./55).*2-1-.1,(sin(pi/4)+sin(Ct)./55).*2-1-.4,...
    [241,63,32]./255,'EdgeColor','none','Visible','off');
% -------------------------------------------------------------------------
CL2=plot(cos(Ct).*2-1-.1,sin(Ct).*2-1-.4,'Color',[0,0,0],'LineWidth',4,'Visible','off');
sep=pi/120;
Ct1=linspace(pi/4+sep,2*pi+pi/4-sep,200);
CX1=cos(Ct1);CY1=sin(Ct1);
Ct2=linspace(-pi/4,pi/4+pi/2,200);
CX2=cos(Ct2);CY2=sin(Ct2);
CL3=plot([CX1,cos(pi/4)+CX2./55,CX1(1)].*2-1-.1,[CY1,sin(pi/4)+CY2./55,CY1(1)].*2-1-.4,...
    'LineWidth',4,'Color','k','Visible','off');
% -------------------------------------------------------------------------
QV1=quiver(0.4+.27,0.06,-.27,0,'off','filled','LineWidth',1.5,'Color',[0,0,0],'MaxHeadSize',.8,'Visible','off');
TXT1=text(0.41+.3,0.06,'Ph.D.','FontSize',13,'FontWeight','bold','Visible','off');
% -------------------------------------------------------------------------
sep=pi/150;
Ct1=linspace(pi/4+sep,2*pi+pi/4-sep,200);
CX1=cos(Ct1);CY1=sin(Ct1);
Ct2=linspace(-pi/4,pi/4+pi/2,200);
CX2=cos(Ct2);CY2=sin(Ct2);
CL4=plot([CX1,cos(pi/4)+CX2./60,CX1(1)],[CY1,sin(pi/4)+CY2./60,CY1(1)],...
    'LineWidth',1.2,'Color','k','Visible','off');
% -------------------------------------------------------------------------
Ct=linspace(0,pi/2,200);
CF4=fill([cos(Ct),0].*2-1-.1,[sin(Ct),0].*2-1,[0,0,0],'EdgeColor','none','Visible','off');
CF5=fill([cos(Ct),0].*1.2-1-.1,[sin(Ct),0].*1.2-1,[227,59,30]./255,'EdgeColor','none','Visible','off');
% -------------------------------------------------------------------------
QV2=quiver(1/sqrt(2)+.04+.07,1/sqrt(2)+.01,-.07,0,'off','filled',...
    'LineWidth',.5,'Color',[0,0,0],'MaxHeadSize',.9,'Visible','off');
TXT2=text(1/sqrt(2)+.04+.07,1/sqrt(2)+.01,'Ph.D.','FontSize',6,'Visible','off');
% =========================================================================
% 动画制作
TITLE=text(-1.08,1.37,{'Imagine a circle that contains','all of human knowledge:'},...
    'FontSize',13,'FontName','Cambria','VerticalAlignment','cap');
CL1.Visible='on';
DelayTime=2;
F=getframe(ax);
[imind,cm]=rgb2ind(F.cdata,256);
imwrite(imind,cm,'PHD.gif','gif','Loopcount',inf,'DelayTime',DelayTime);

pause(2)
TITLE.String={'By the time you finish elementary school,','you know a little:'};
CF3.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String={'By the time you finish high school,','you know a bit more:'};
CF2.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String={"With a bachelor's degree,",'you gain a specialty:'};
CF1.Visible='on';
EF3.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="A master's degree deepens that specialty:";
EF2.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String={"Reading research papers takes you to",'the edge of human knowledge:'};
EF1.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="Once you're at the boundary, you focus:";
SL1.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="You push at the boundary for a few years:";
CL1.Visible='off';
CF1.Visible='off';
CF2.Visible='off';
CF3.Visible='off';
EF1.Visible='off';
EF2.Visible='off';
EF3.Visible='off';
SL1.Visible='off';
CL2.Visible='on';
EF4.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="Until one day, the boundary gives way:";
CL2.Visible='off';
CL3.Visible='on';
EF5.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String={"And, that dent you've made",'is called a Ph.D.:'};
QV1.Visible='on';
TXT1.Visible='on';
addFrame(ax,DelayTime)


pause(2)
TITLE.String={"Of course," ,'the world looks different to you now:'};
EF4.Visible='off';
CL3.Visible='off';
EF5.Visible='off';
QV1.Visible='off';
TXT1.Visible='off';
CF4.Visible='on';
CF5.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="So, don't forget the bigger picture:";
CF4.Visible='off';
CF5.Visible='off';
CL4.Visible='on';
QV2.Visible='on';
TXT2.Visible='on';
addFrame(ax,DelayTime)

pause(2)
TITLE.String="Keep pushing.";
CL4.Visible='off';
QV2.Visible='off';
TXT2.Visible='off';
addFrame(ax,DelayTime)
% =========================================================================
% 椭圆数据点生成函数
    function [X,Y]=getEllipse(Mu,XR,YR,theta,pntNum)
        % Mu     | 中心点
        % XR,YR  | 旋转前X,Y半轴长度
        % theta  | 旋转角度
        % pntNum | 生成数据点个数
        tList=linspace(0,2*pi,pntNum);
        X=cos(tList).*XR;
        Y=sin(tList).*YR;
        rotateMat=[cos(theta),-sin(theta);sin(theta),cos(theta)];
        XY=rotateMat*[X;Y]+Mu(:);
        X=XY(1,:);Y=XY(2,:);
    end

    function addFrame(ax,DelayTime)
        tF=getframe(ax);
        [timind,tcm]=rgb2ind(tF.cdata,256);
        imwrite(timind,tcm,'PHD.gif','gif','WriteMode','append','DelayTime',DelayTime);
    end
end

再次注

本文图解复刻自Matt Might的《博士学位的图解指南》一文,相关信息如下:

  • 作品名称 : The Illustrated Guide to a Ph.D.
  • 作者 : Matt Might
  • 作者主页 : http://matt.might.net/
  • 原作链接 : http://matt.might.net/articles/phd-school-in-pictures/

相关文章:

  • 单词相似性查询易语言代码
  • 【Vue】Vue项目需求--实现搜索框输入防抖处理
  • 03Python数据类型
  • CSS常见选择器
  • React-函数组件的特性与闭包
  • MySQL的EXPLAIN执行计划深入分析
  • 【MySQL基础篇】MySQL数据库安装教程
  • 记某同事的两次误操作导致Linux瘫痪
  • 初识OpenGL (-)纹理过滤(Texture Filtering)
  • ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(3)
  • wsl安装gpu版mindspore(二)
  • 输出总结是成长的开始
  • [RK3568 Android11] Binder通信整体框架
  • 【uiautomation】获取微信好友名单,可指定标签 全部
  • VAPS XT开发入门教程07:表元素(TableElements)介绍
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【Leetcode】104. 二叉树的最大深度
  • 【笔记】你不知道的JS读书笔记——Promise
  • C++类的相互关联
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript设计模式之工厂模式
  • Next.js之基础概念(二)
  • vuex 学习笔记 01
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 给第三方使用接口的 URL 签名实现
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 欢迎参加第二届中国游戏开发者大会
  • 机器学习中为什么要做归一化normalization
  • 前端面试之闭包
  • 前端性能优化--懒加载和预加载
  • 如何利用MongoDB打造TOP榜小程序
  • 思考 CSS 架构
  • 网页视频流m3u8/ts视频下载
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我有几个粽子,和一个故事
  • 移动端 h5开发相关内容总结(三)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​比特币大跌的 2 个原因
  • # include “ “ 和 # include < >两者的区别
  • #pragma data_seg 共享数据区(转)
  • #pragma multi_compile #pragma shader_feature
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (9)目标检测_SSD的原理
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (动态规划)5. 最长回文子串 java解决
  • (二)pulsar安装在独立的docker中,python测试
  • (循环依赖问题)学习spring的第九天
  • (一)appium-desktop定位元素原理
  • (转)【Hibernate总结系列】使用举例
  • (转)h264中avc和flv数据的解析