我试图弄清楚下一个示例中发生了什么
https://threejs.org/examples/css3d_periodictable.html(球体版本)
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 );
...
}
我阅读了一些数学文章(只是解释了将球坐标转换为笛卡尔坐标)并发现了这个问题 Can有人解释公式。由于我的声誉,我不可能在那里发表评论,但毕竟我仍然不明白他们是如何得到这两个公式的。
var phi = Math.acos( -1 + ( 2 * i ) / l );
var theta = Math.sqrt( l * Math.PI ) * phi;
所以我的问题是:
1)你如何得到这些公式?
2) 为什么用对象的长度来获取 phi 和 theta?