【问题标题】:Three.js spherical coordinates formula三.js球坐标公式
【发布时间】:2017-11-13 12:00:14
【问题描述】:

我正试图弄清楚下一个示例中发生了什么
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 someone explain the formula。由于我的声誉,我不可能在那里发表评论,但毕竟我仍然不明白他们是如何得到这两个公式的。

var phi = Math.acos( -1 + ( 2 * i ) / l );
var theta = Math.sqrt( l * Math.PI ) * phi;

所以我的问题是:

1) 你如何得到这些公式?

2) 为什么要使用对象的长度来获取 phi 和 theta?

【问题讨论】:

    标签: math three.js spherical-coordinate


    【解决方案1】:

    请注意,phi 从 Pi 变为 0,对应于反余弦定律,而 theta 线性取决于 phi。所以这些角度的组合在半球表面形成螺旋(给定的代码不包含制作第二个半球的线索)。

    反余弦定律提供等距线圈(循环?不知道螺旋转弯的确切术语)。 theta 的线性相关性在方位角(子午线)上给出了一些分布。已选择 Sqrt(Pi*L) 乘数,因为总螺旋长度(以适合 L 个项目)。

    看看元素周期表开始的球极 - 极点上的氢,靠近极点的氦,其次是锂,依此类推 - 形成螺旋。

    请注意,phi/theta 名称与常见(和 wiki 页面)名称不同 - 这里 theta 是方位角。

    【讨论】:

    • 谢谢,如果我设置 i=Li=0 我会得到这两个边界“0 和 Pi”吗?其实我现在才注意到螺旋!但是为什么是 Sqrt,为什么是 L 而不是每个对象的大小? Sqrt(Pi*L) 像螺旋长度的公式吗?也许有一些数学解释的链接也会有帮助
    • 是的,0..Pi 是反余弦主值的范围。使用 i=L 和 0,您将得到 0 和 Pi。物体应该沿着所有的螺旋分布,所以它的长度已经被使用了。我不知道这个球形螺旋长度的公式,但它可以通过曲线元素的积分(微分几何)推导出来。
    猜你喜欢
    • 2021-11-18
    • 2019-08-09
    • 2014-01-13
    • 2016-12-24
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多