2017-06-12 4 views
1

は、私は次の例で何が起こっているのかを把握しようとしている座標
https://threejs.org/examples/css3d_periodictable.html私は変換するだけで説明がありました(いくつかの数学の記事を読むThree.jsの球状式

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。私の評判のためにそこにコメントを残すことは不可能でしたが、それでもこれらの2つの式をどうやって得たのかまだ分かりません。

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

だから私の質問は以下のとおりです。

1)あなたはこれらの式を取得するにはどうすればよいですか?

2)なぜphiとthetaを取得するためにオブジェクトの長さが使用されましたか?

答えて

2

phiは、アルコサインの法則に対応してPiから0まで変化しますが、thetaは直線的にphiに依存します。したがって、これらの角度の組み合わせは、半球面上にらせん状になります(与えられたコードには、第2の半球を作るための手がかりは含まれません)。

アークコーンの法則は、等距離コイル(ループは渦巻きターンの正確な項を知らない)を提供します。 thetaの線形依存性は、方位角(メリジオナル)角にいくらかの分布を与える。 Sqrt(Pi*L)乗数は、全体的なスパイラル長(L項目に適合)のために選択されています。

周期表が始まる球の極を見てください - 極では水素、それに近いところはヘリウム、次にリチウムは次のように - 渦巻きを形成します。

phi/thetaの名前は一般的な(およびwikiページの)指定と異なります - ここでは、シータは方位角です。

+0

ループ内のphiのすべての値が常に「Piから0」の範囲にあり、** i = L **と** i = 0 **を設定するとこれらの2つの境界「0とPi」を正確に取得しますか? 実際、私は今、スパイラルに気づいただけです!しかし、なぜSqrt、なぜLと各オブジェクトのサイズではないのですか? Sqrt(Pi * L)はスパイラルの長さの式のようですか?多分数学の説明へのリンクがあるかもしれません。それは役に立ちます –

+1

はい、0..Piは円錐主義値の範囲です。 i = Lと0を指定すると、0とPiが得られます。オブジェクトはすべてのスパイラルに沿って配布する必要があるため、長さが使用されています。この球状スパイラル長の式はわかりませんが、曲線要素上の積分(微分ジオメトリ)によって推論することができます。 – MBo

関連する問題