Help us understand the problem. What is going on with this article?

Three.jsで遊んでみた - 球面と回転 - 回転行列の適用順序

ふと、サッカーボールの立体図形をプログラムで算出させて描いてみたいと思いたったが、恐ろしくムズカシイ。。
原点から延びる半直線に直交する平面上に正多角形を描けるようになればなんか進みそうな気がしたので、球面上で色々やってみました。

回転対象とする点の軌道円

マウスでドラッグ操作すると視点を動かせます。(PC環境でないと動かせなさそう。)
R,G,B(赤、緑、青)の順で、x軸,y軸,z軸です。

See the Pen AxisAndRotationSampleUsing_Three_js by kob58im (@kob58im) on CodePen.

ちなみに、Three.jsではデフォルト設定だとx軸,y軸,z軸の順で回転させるようです(ググっただけの知識なので裏は取っていないです)。rotation.xとかを操作するときにこのへんは知っておいたほうがよいと思います。← どうにも胡散臭い・・・
まぁ、今回は現物合わせしていますが、、1

直交平面と球面が交わる円

円にはトーラスを使っています。トーラスを直接リサイズできないようなので、sceneから一度登録を削除して生成しなおし、再登録するようにしました。three.js の Mesh を削除する参照。

下記のU_angleは、原点と円周上の点を結ぶ直線を考えたときに、その直線と、原点から延びる半直線との成す角を指定しています。

See the Pen Torus_Resize_Using_Three_js by kob58im (@kob58im) on CodePen.

正六角形の頂点を球面上に置いてみる

回転行列を掛けて正六角形の頂点を一緒に回転させるところまではできた。
(※今回ハンドコーディングした回転行列の関数は、three.jsの仕様に合わせてはないのでsin,cosの取違いとか符号はテキトウに現物合わせしています。そのうち見直します。)

See the Pen PointsOnTheSphere_using_Three_js by kob58im (@kob58im) on CodePen.

物体のrotationの回転軸の順序を実験で確認してみた

実験的に確認したところだと、rotation.x, rotation.y, rotation.z に対する回転は、z軸⇒y軸⇒x軸の順で回転しているっぽい?
(すべての回転角を0(ここではスライダの左端の値を0としています)にしておき、z⇒y⇒xの順で操作すると、z軸⇒y軸⇒x軸を中心として回転しているように見受けられる。)

See the Pen SampleForCheckingRotationOrderUsingThreeJs by kob58im (@kob58im) on CodePen.

下記の順序で回転行列が乗算されてるっぽい。

\begin{pmatrix}
1 & 0    & 0 \\
0 & \cos\theta_X & -\sin\theta_X \\
0 & \sin\theta_X &  \cos\theta_X \\
\end{pmatrix}
\begin{pmatrix}
\cos\theta_Y & 0 & \sin\theta_Y \\
0 & 1    & 0 \\
-\sin\theta_Y & 0 & \cos\theta_Y \\
\end{pmatrix}
\begin{pmatrix}
\cos\theta_Z & -\sin\theta_Z & 0 \\
\sin\theta_Z &  \cos\theta_Z & 0 \\
0    & 0  & 1\\
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
z \\
\end{pmatrix}


参考サイト


  1. 今回やってみて、現物合わせするにも、ある程度把握していないと(やみくもにやると)正解を当てられない。と思った次第です。 

kob58im
趣味でC#で色々試してます。 置いてるほとんどのC#サンプルコードは、Windows7以降デフォで入ってる環境でコンパイルできます。 最近はCodePen使ってJavaScriptも書いてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away