ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MATLAB绘制 “甲基橙“分子示例图(整活)

2021-11-13 21:30:00  阅读:209  来源: 互联网

标签:end 整活 示例 rotateXYZ nX nY nZ MATLAB ax


近期确实是比较忙,更得也比较慢,这次整个活:
甲基橙 hiahihia
效果:
在这里插入图片描述
在这里插入图片描述
注意,请将以下图片命名为surf.png并放在m文件所在文件夹:
自己截图拼的橙子皮,大家有更好看的可以自行替换:

在这里插入图片描述
原理也很简单,只是画一些桶装曲面和球状曲面拼在一起并打光,橙子的话贴个图,
完整代码:

function CH4_Orange
% @author:slandarer
% 仅供娱乐(甲基橙结构式!):
% -----------------+
%    H             |
%     \            |
% H — C — Orange |
%     /            |
%    H             |
% -----------------+

% axes属性设置
ax=gca;
hold(ax,'on')
ax.PlotBoxAspectRatio=[1 1 1];
ax.PlotBoxAspectRatioMode='manual';
ax.XLim=[-4 4];
ax.YLim=[-4 4];
ax.ZLim=[-5 3];
ax.View=[45,45];
ax.XGrid='on';
ax.YGrid='on';
ax.ZGrid='on';
ax.Color=[0 0 0];
% =========================================================================

% 绕轴旋转矩阵
yaw_z=2*pi/3;
roll_x=acos(1/3);
R_z=[cos(yaw_z),-sin(yaw_z),0;
    sin(yaw_z) ,cos(yaw_z) ,0;
    0          ,0          ,1];
R_x=[1,0          ,           0;
     0,cos(roll_x),-sin(roll_x);
     0,sin(roll_x),cos(roll_x)];

% -------------------------------------------------------------------------
% 绘制C原子
[Xball,Yball,Zball]=sphere(300); % 制作球形曲面
surf(Xball,Yball,Zball,'FaceColor',[.2,.2,.2],'EdgeColor','none')

% 绘制三个H原子
[nX,nY,nZ]=rotateXYZ(Xball.*.8,Yball.*.8,Zball.*.8+2.5,R_x);
for k=1:3
    [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z);
    surface(nX,nY,nZ,'FaceColor',[.95,.95,.95],'EdgeColor','none')
end

% 橘子表面图倒入
surfImg=imread('surf.png');
surfImg=imresize(surfImg,size(Zball));





% -------------------------------------------------------------------------
% 制作一个圆筒状曲面
[Tcol,Zcol]=meshgrid(0:(2*pi/100):2*pi,(1:100)./100);
Xcol=cos(Tcol);
Ycol=sin(Tcol);

% 绘制连接杆
surf(0+Xcol.*.3,0+Ycol.*.3,-1.7+Zcol,'FaceColor',[.3,.3,.3],'EdgeColor','none')
[nX,nY,nZ]=rotateXYZ(Xcol.*.3,Ycol.*.3,Zcol.*.4+0.95,R_x);
for k=1:3
    [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z);
    surface(nX,nY,nZ,'FaceColor',[.3,.3,.3],'EdgeColor','none')
end
[nX,nY,nZ]=rotateXYZ(Xcol.*.3,Ycol.*.3,Zcol.*.4+1.35,R_x);
for k=1:3
    [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z);
    surface(nX,nY,nZ,'FaceColor',[.98,.98,.98],'EdgeColor','none')
end

% 打光
light;
material shiny %让上面所有曲面都有镜面质感

% 在最后画橙子,将镜面反射调低,漫反射调高,让他有布料质感
surf(Xball.*2,Yball.*2,-3+Zball.*1.7,'CData',surfImg,...
    'EdgeColor','none','SpecularStrength',.0001,'DiffuseStrength',.7)
% =========================================================================

% 点绕轴旋转函数
    function [nX,nY,nZ]=rotateXYZ(X,Y,Z,R)
        nX=zeros(size(X));
        nY=zeros(size(Y));
        nZ=zeros(size(Z));
        for i=1:size(X,1)
            for j=1:size(X,2)
                v=[X(i,j);Y(i,j);Z(i,j)];
                nv=R*v;
                nX(i,j)=nv(1);
                nY(i,j)=nv(2);
                nZ(i,j)=nv(3);
            end
        end
    end
% -------------------------------------------------------------------------
end

在这里插入图片描述

标签:end,整活,示例,rotateXYZ,nX,nY,nZ,MATLAB,ax
来源: https://blog.csdn.net/slandarer/article/details/121310451

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有