分子角度建设

时间:2013-11-21 00:04:40

标签: three.js

我尝试用threejs构建分子CH4

enter image description here

但是当我尝试建立109.5角度时

methanum = function(x, y, z) {
  molecule = new THREE.Object3D();
  var startPosition = new THREE.Vector3( 0, 0, 0 );
  molecule.add(atom(startPosition, "o"));
  var secondPosition = new THREE.Vector3( -20, 10, 00 );
  molecule.add(atom(secondPosition, "h"));
  var angle = 109.5;
  var matrix = new THREE.Matrix4().makeRotationAxis( new THREE.Vector3( 0, 1, 0 ), angle * ( Math.PI / 180 ));
  var thirdPosition = secondPosition.applyMatrix4( matrix );
  molecule.add(atom(thirdPosition, "h"));
  var fourthPosition = thirdPosition.applyMatrix4( matrix );
  molecule.add(atom(thirdPosition, "h"));
  molecule.position.set(x, y, z);
  molecule.rotation.set(x, y, z);
  scene.add( molecule );
}

演示:https://dl.dropboxusercontent.com/u/6204711/3d/ch4.html

但我的原子并没有像图纸那样均匀分布

一些想法?

1 个答案:

答案 0 :(得分:1)

分子代码中有3个错误。

  • 您放置氧气作为CH4的中心而不是碳
  • 当您应用第四个氢时,指定第三个位置,而您创建了fourthposition
  • 放置第三个氢气时,绕错轴旋转。我的提示如下:首先,放置碳,然后沿Z轴移动,放置第一个氢气,绕 X轴旋转109.5°,放置第二个氢气,旋转围绕 Z轴 120°的第二个氢的位置,放置你的第三个氢,最后绕 Z轴再次旋转120°你的位置第三个氢气并放置你的最后一个氢气。

这是我试过的CH4:

methanum3 = function(x, y, z) {


    molecule = new THREE.Object3D();
    var startPosition = new THREE.Vector3( 0, 0, 0 );
    molecule.add(atom(startPosition, "c"));

    var axis = new THREE.AxisHelper( 50 );
    axis.position.set( 0, 0, 0 );
    molecule.add( axis );

    var secondPosition = new THREE.Vector3( 0, 0, -40 );
    molecule.add(atom(secondPosition, "h"));


    var angle = 109.5;
    var matrixX = new THREE.Matrix4().makeRotationAxis( new THREE.Vector3( 1, 0, 0 ), angle * ( Math.PI / 180 ));
    var thirdPosition = secondPosition.applyMatrix4( matrixX );
    molecule.add(atom(thirdPosition, "h"));

    var matrixZ = new THREE.Matrix4().makeRotationAxis( new THREE.Vector3( 0, 0, 1 ), 120 * ( Math.PI / 180 ));

    var fourthPosition = thirdPosition.applyMatrix4( matrixZ );
    molecule.add(atom(fourthPosition, "h"));

    var fifthPosition = fourthPosition.applyMatrix4( matrixZ );
    molecule.add(atom(fifthPosition, "h"));

    molecule.position.set(x, y, z);
    //molecule.rotation.set(x, y, z);
    scene.add( molecule );
}

//water(0,0,0);
//water(30,60,0);
methanum3(-30,60,0);

说明:

让我们将H 1 称为氢,而将H 2 称为另一个。给定角度109.5°定义在:

---> --->
(CH 1 ,CH 2 )平面。因此,当您沿着该平面的法线方向查看时,您可以看到109.5°( Cf。下图中的右侧部分)但是当您查看时在另一个平面的法线方向上,您将获得该平面上该角度的投影。在您查看Z轴方向的情况下,您可以看到120°的角度。( Cf。左下图部分)。

Angles http://oi43.tinypic.com/6zsinb.jpg

这两个角度根据相机的方向而不同。

希望这有帮助。