1

単純な 3D ピラミッドを描画するために、球座標をデカルト座標に変換しようとしています。

極角 yrad と方位角 xrad と頂上座標 x と y に応じて、ピラミッドの ​​4 つの主要な角を取得するコードを次に示します。

xpos1 = x+25*(      sin(yrad+pi/2+pi/4)*cos(-xrad+pi/2+pi/4));
zpos1 = y-35+25*(   cos(yrad+pi/2+pi/4)); 
xpos2 = x+25*(      sin(yrad+pi/2-pi/4)*cos(-xrad+pi/2+pi/4));
zpos2 = y-35+25*(   cos(yrad+pi/2-pi/4)); 
xpos3 = x+25*(      sin(yrad+pi/2-pi/4)*cos(-xrad+pi/2-pi/4));
zpos3 = y-35+25*(   cos(yrad+pi/2-pi/4)); 
xpos4 = x+25*(      sin(yrad+pi/2+pi/4)*cos(-xrad+pi/2-pi/4));
zpos4 = y-35+25*(   cos(yrad+pi/2+pi/4)); 

方位角軸は正常に動作しているように見えますが、極角を操作すると、ここに示すように、天頂または底を超えると左右が入れ替わることが問題です (よりスムーズに再生するには、上部の mp4 を選択してください): http: //gyazo.com/4a245713c232893960863cf4ea4186f6

なにが問題ですか?

4

1 に答える 1

5

へへ、このバグは確かに見栄えの良い結果をもたらします:)それを解決しましょう。

極座標では、2 つの角度を定義します。

  • 極角 ( yrad) - 極を中心とした回転角度
  • 方位角 ( xrad) - 赤道線の「上」/「下」の角度 (0 は「北極」にあります)

それを視覚化しようとすると、次のようになります。

      Look from above         |          Look from side           
(Z goes positive towards you) |    (Y goes negative towards you)  
                              |                                   
            Y-  Z-            |                Z-  Y+             
            |  /              |                |  /               
            | / "far"         |                | / "far"          
            |/                |                |/                 
   X- ------+-------> X+      |       X- ------+-------> X+       
           /| yrad |          |               /| xrad ^           
   "near" / |<-----+          |       "near" / |------+           
         /  |  "polar angle"  |             /  |  "azimuth angle" 
        Z+  Y+                |            Y-  Z+                 

これらの角度を使用して、次の方法で座標を計算できます。

         Point := radius * (x = sin(xrad) * cos(yrad)
                            y = sin(xrad) * sin(yrad)
                            z = cos(xrad))

これらは従来の表記法です (球座標系を参照)。ポイントのデカルト表現を描画する場合、通常は X 座標と Y 座標を使用しますが、X と Z を選択しても問題ありません。

ただし、あなたが犯した間違いは、角度を交換したことです!

Your computation  |  x := sin( yrad ) * cos ( xrad )  |  z := cos( yrad )
------------------+-----------------------------------+------------------
Should have been  |  x := sin( xrad ) * cos ( yrad )  |  z := cos( xrad )

したがって、方位角 ( xrad) を変更すると、影響を受けるのは X 座標のみであり、これは実際には非常にうまく機能しました ( cos( xrad ) = sin( 90 - xrad )、したがって、洞の動作があったため ( で必要な場合xrad) )。極角 ( yrad) を回転させたとき、両方の座標の変更が調整されていなかったため (しゃれは意図されていませんでした)、見苦しくなり始めました。

于 2014-08-20T16:43:42.000 に答える