meatball1982 发表于 2019-3-15 21:29:32

豆粑粑 matlab不同的方式画分子的表面。

本帖最后由 meatball1982 于 2019-3-16 15:04 编辑

是让孩子们作的,我给整一下先。
这两天写本子,画几个小图,放松一下。

你的有一个分子。
我是从pdb 里把位置给提出来。
设置一个球,以原子位置为球心,放球。
在空间中有很多的点。

通过boundary(真是个好函数,比较新的版本才有)。实现2D和3D边界的显示。




clear all
clc
clf



dat=load('../file_data/pos_ala.txt');

x=dat(:,1);
y=dat(:,2);
z=dat(:,3);

=sphere(50);

r=2.2;



n_p=length(x);

x_all=[];
y_all=[];
z_all=[];


for i =1:n_p
%   rat = 1+0.03*i;
    rat = 1;
    sx_new=rat*r.*sx;
    sy_new=rat*r.*sy;
    sz_new=rat*r.*sz;
    x_all=;
    y_all=;
    z_all=;
end

%

axis equal

subplot(2,2,1)
plot3(x_all,y_all,z_all,'.','markersize',3);
view(90,17.6)
axis off
axis tight

subplot(2,2,2)
=boundary(,0.8);

trisurf(k_all3,x_all,y_all,z_all,'facecolor','red','facealpha',0.2,'edgecolor','y','edgealpha',0.2)
view(90,17.6)
axis off
axis tight

subplot(2,2,3)
lin = linspace(-4,4,8);
lin =[-3 -2.5 -2 -1.5 -1 -0.5 0 1 2 3 4 5 6 7 8 9 10 ]
n_l =length(lin)


col_mm = jet(n_l);
hold on
for i = 1:n_l
    lb = lin(i)-0.2;
    ub = lin(i)+0.2;
    ind = z_all > lb & z_all < ub;
    tm_x = x_all(ind);
    tm_y = y_all(ind);
   
    k_all=boundary(,0.99-0.02*i);
   
   
    plot3(tm_x(k_all),tm_y(k_all),lin(i)*ones(size(k_all)),'-','linewidth',1+0.3*i,'color',col_mm(i,:))
   
end


view(90,17.6)
axis equal
axis off
axis tight

subplot(2,2,4)
lin = linspace(-4,4,8);
lin =[-3 -2.5 -2 -1.5 -1 -0.5 0 1 2 3 4 5 6 7 8 9 10 ]
n_l =length(lin)


col_mm = jet(n_l);
hold on
for i = 1:n_l
    lb = lin(i)-0.2;
    ub = lin(i)+0.2;
    ind = z_all > lb & z_all < ub;
    tm_x = x_all(ind);
    tm_y = y_all(ind);
   
    k_all=boundary(,0.99-0.02*i);
   
   
    h=patch(tm_x(k_all),tm_y(k_all),lin(i)*ones(size(k_all)),col_mm(i,:),'edgecolor','none')
    alpha(h,0.8-0.02*i);
   
   
end


view(90,17.6)
axis equal
axis off
axis tight


h=gcf;
fi_na = '../file_imgs/fig_cont_ala_4sub';
fun_work_li_035_myfig_out(h,fi_na,3)



meatball1982 发表于 2022-12-30 16:56:09

思路是通过每个原子的vdw半径向外进行扩展,在球面,生成均匀颁的散点。
对于不同半径的球面,分别生成散点。

其中,第i个原子的球面的散点要满足距离atom_i 相比于距离atom_j要近。否则,放弃散点。

球面上生成均匀散点是根据文献实现。
E. B. Saff and A. B. J. Kuijlaars, "Distributing Many Points on a Sphere", The Mathematical Intelligencer, 19, 5-11 (1997)

生成网格点是根据tinker中potential.f中的子函数
potgrid
实现。


页: [1]
查看完整版本: 豆粑粑 matlab不同的方式画分子的表面。