Mathematica中文论坛-非官方

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 25974|回复: 1

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

[复制链接]

525

主题

594

帖子

2980

积分

金牌会员

Rank: 6Rank: 6

积分
2980
发表于 2019-3-15 21:29:32 | 显示全部楼层 |阅读模式
本帖最后由 meatball1982 于 2019-3-16 15:04 编辑

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

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

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



fig_cont_ala_4sub.png
  1. clear all
  2. clc
  3. clf



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

  5. x=dat(:,1);
  6. y=dat(:,2);
  7. z=dat(:,3);

  8. [sx,sy,sz]=sphere(50);

  9. r=2.2;



  10. n_p=length(x);

  11. x_all=[];
  12. y_all=[];
  13. z_all=[];


  14. for i =1:n_p
  15. %     rat = 1+0.03*i;
  16.     rat = 1;
  17.     sx_new=rat*r.*sx;
  18.     sy_new=rat*r.*sy;
  19.     sz_new=rat*r.*sz;
  20.     x_all=[x_all;dat(i,1)+sx_new(:)];
  21.     y_all=[y_all;dat(i,2)+sy_new(:)];
  22.     z_all=[z_all;dat(i,3)+sz_new(:)];
  23. end

  24. %

  25. axis equal

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

  31. subplot(2,2,2)
  32. [k_all3 ]=boundary([x_all,y_all,z_all],0.8);

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

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


  41. col_mm = jet(n_l);
  42. hold on
  43. for i = 1:n_l
  44.     lb = lin(i)-0.2;
  45.     ub = lin(i)+0.2;
  46.     ind = z_all > lb & z_all < ub;
  47.     tm_x = x_all(ind);
  48.     tm_y = y_all(ind);
  49.    
  50.     k_all=boundary([tm_x,tm_y],0.99-0.02*i);
  51.    
  52.    
  53.     plot3(tm_x(k_all),tm_y(k_all),lin(i)*ones(size(k_all)),'-','linewidth',1+0.3*i,'color',col_mm(i,:))
  54.    
  55. end


  56. view(90,17.6)
  57. axis equal
  58. axis off
  59. axis tight

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


  64. col_mm = jet(n_l);
  65. hold on
  66. for i = 1:n_l
  67.     lb = lin(i)-0.2;
  68.     ub = lin(i)+0.2;
  69.     ind = z_all > lb & z_all < ub;
  70.     tm_x = x_all(ind);
  71.     tm_y = y_all(ind);
  72.    
  73.     k_all=boundary([tm_x,tm_y],0.99-0.02*i);
  74.    
  75.    
  76.     h=patch(tm_x(k_all),tm_y(k_all),lin(i)*ones(size(k_all)),col_mm(i,:),'edgecolor','none')
  77.     alpha(h,0.8-0.02*i);
  78.    
  79.    
  80. end


  81. view(90,17.6)
  82. axis equal
  83. axis off
  84. axis tight


  85. h=gcf;
  86. fi_na = '../file_imgs/fig_cont_ala_4sub';
  87. fun_work_li_035_myfig_out(h,fi_na,3)
复制代码



vmdscene_surf.pov.png

pos_ala.txt.zip

370 Bytes, 下载次数: 0

ala.pdb.zip

542 Bytes, 下载次数: 0

回复

使用道具 举报

525

主题

594

帖子

2980

积分

金牌会员

Rank: 6Rank: 6

积分
2980
 楼主| 发表于 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
实现。


fig_grid.png

file_f.zip

77.85 KB, 下载次数: 0

file_data.zip

107.38 KB, 下载次数: 0

file_m.zip

4.87 KB, 下载次数: 0

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Mathematica中文论坛-非官方 ( 辽ICP备16001491号-1

GMT+8, 2024-3-28 17:35 , Processed in 0.122105 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表