我试图弄清楚下一个例子中发生了什么 https://threejs.org/examples/css3d_periodictable.html(球体版本)
>>> import re
>>> filter(lambda x: re.match(r'^[^\w]+$',x),s)
我读了一些数学文章(只有将球面坐标转换为笛卡尔坐标的解释)并找到了这个问题 Can someone explain the formula。由于我的声誉,我不可能在那里发表评论,但是在完成所有这些之后我仍然不明白他们是如何得到这两个公式的。
var vector = new THREE.Vector3();
var spherical = new THREE.Spherical();
for ( var i = 0, l = objects.length; i < l; i ++ ) {
var phi = Math.acos( -1 + ( 2 * i ) / l );
var theta = Math.sqrt( l * Math.PI ) * phi;
var object = new THREE.Object3D();
spherical.set( 800, phi, theta );
object.position.setFromSpherical( spherical );
...
}
所以我的问题是:
1)你如何得到这些公式?
2)为什么用于获得phi和theta的对象的长度?
答案 0 :(得分:3)
请注意,phi
从对应于反余弦定律的Pi到0变化,而theta
线性地取决于phi
。因此,这些角度的组合在半球表面上形成螺旋(给定代码不包含制作第二个半球的线索)。
Arccosine定律提供等距线圈(环路?不知道螺旋转弯的确切术语)。 theta
的线性相关性在方位角(子午角)上产生一些分布。由于整体螺旋长度(适合L项目),已选择Sqrt(Pi*L)
乘数。
看周期表开始的球体极点 - 极点处的氢气,氦气接近它,锂气接近,依此类推 - 形成螺旋状。
请注意,phi/theta
名称与普通(和维基页面)名称不同 - 此处theta是方位角。