将Mathematica中的多个3D对象放在同一个3D框中

时间:2012-01-17 16:46:44

标签: wolfram-mathematica 3d

我有一个由mathematica中的ListPlot3D创建的3D表面。表面本身是相对平面的并且在任意平面xy中。我想将这个表面放在分子的顶部,该分子是从ChemicalData函数生成的,或者是从.pdb或其他分子输入输入的。该分子也是平面的并且再次放置在xy平面中。我希望这两个3D对象分开一些z距离。

最终的希望是,我将在这个平面分子上面放置一个潜在的能量表面,它仍然可以在3D中旋转。我一直在使用Show和Graphics 3D选项没有成功。表面上的x,y点对应于3D分子上的x,y点,但是它们可以根据需要容易地缩放和移位。作为最后的选择,我想我可以输入原子的x,y,z坐标,并使用PointListPlot3D命令和各种选项来模仿分子的外观,但这似乎要复杂得多。

另一种可能的方法是将两个3D对象转换为3D框并简单地堆叠在一起。但是我还没有在mathematica中找到这个功能。有没有人对如何做到这一点有任何想法?

PES = ListPlot3D[{{0., 0., -2.04900365`},..., {0., 0.3, -2.05743098`}}]
Show[Graphics3D[ChemicalData["Benzene","MoleculePlot"]],PES]

问题在于分子的规模与能量表面的比例。

我能说的最好的单位是皮米。然而,它们的原子距离似乎偏差了3%。

作为对此的更新,采用分子的xyz坐标并手工生成对象变得更加简单。已经有一段时间但我相信如果你只说:

ChemicalData["Benzene","MoleculePlot"]

Mathematica将向您展示格式。如果你做了很多这样的事情,可以制作一个相当简单的python脚本。

2 个答案:

答案 0 :(得分:9)

Szabolcs说了什么,我也没有从你的问题中得到为什么不会有这样的工作呢?

    Show[Graphics3D[
  Rotate[ChemicalData["Caffeine", "MoleculePlot"][[1]], 
   45 Degree, {1, .5, 0}]], 
 Plot3D[-200 + 50 Sin[x*y/10000], {x, -100 Sqrt[3*Pi], 
   100 Sqrt[3*Pi]}, {y, -100 Sqrt[3*Pi], 100 Sqrt[3*Pi]}, 
  ColorFunction -> "TemperatureMap"], Axes -> True]

enter image description here

答案 1 :(得分:4)

ListPlot3D会返回Graphics3D个对象,因此您应该能够将其与其他Graphics3D个对象合并...

lp = ListPlot3D[  RandomReal[{}, {50, 3}], Mesh -> None];
sp = Graphics3D[Sphere[]];
Show[sp, lp, Boxed -> False]

a new gravatar

尽管获得相同大小的所有内容将是挑战......