分子生成
clc;clear all;close all;
Ai=1e-10;
num=50;
X=10*Ai*rand(num,1);Y=10*Ai*rand(num,1);Z=10*Ai*rand(num,1);
%X=0;Y=0;Z=0;
R_O=1.48*Ai;%氧原子直径玻尔模型
R_H=1.06*Ai;%氢原子直径玻尔模型
theta_OH=104.523;%H-O-H键角
L_OH=0.95718*Ai;%OH原子间键长实验值
L_HH=L_OH*sind(theta_OH/2);%HH原子间距计算值
az=30;%方位角
el=5;%仰角
ro=10;%旋转角
dz1=L_OH*sind(el);dx1=L_OH*cosd(el)*sind(az);dy1=L_OH*cosd(el)*cosd(az);
Lvt=L_OH*cosd(el)*sind(theta_OH);%第二个氢原子到O-H线上垂直距离
azp=180-asind(Lvt*cosd(ro)/L_OH);%旋转后的方位角
elp=asind(Lvt*sind(ro)/L_OH);%旋转后的仰角
dz2=L_OH*sind(elp+el);%第二个原子相对于中心原子的z距离
dx2=L_OH*cosd(el+elp)*sind(az+azp+theta_OH);
dy2=L_OH*cosd(el+elp)*cosd(az+azp+theta_OH);
[x y z]=sphere(100);
for m=1:num
hold on;
h1=surf(X(m)+x*R_O,Y(m)+y*R_O,Z(m)+z*R_O);
end
for m=1:num
P1x=X(m)+dx1;P1y=Y(m)+dy1;P1z=Z(m)+dz1;
P2x=X(m)+dx2;P2y=Y(m)+dy2;P2z=Z(m)+dz2;
h2=surf(P1x+x*R_H,P1y+y*R_H,P1z+z*R_H);
h3=surf(P2x+x*R_H,P2y+y*R_H,P2z+z*R_H);
end
colormap([1 0 0]);
axis equal;view(3);
camlight right;
shading interp;%去掉网格
lighting phong;%哑光效果,去除表面纹路
xlabel('x');ylabel('y');
其中,单个球体的函数如下
function atom_ball(X,Y,Z,R)%坐标和球半径
Ai=1e-10;%单位转换,米转埃米
X=Ai*X;Y=Ai*Y;Z=Ai*Z;R=Ai*R;
num=length(X);%坐标点数
[x y z]=sphere(100);
colormap([0 0 1]);
for m=1:num
hold on;surf(X(m)+x*R,Y(m)+y*R,Z(m)+z*R);
end
hold off;
axis equal;view(3);
camlight right;%右边添加光照
shading interp;%去掉网格
lighting phong;%哑光效果,去除表面纹路
end