Japanese subtitles

← Angle of Rotation

Get Embed Code
2 Languages

Showing Revision 1 created 03/11/2014 by Fran Ontanaya.

  1. (-x,0,z)を通る回転軸があるとします
  2. 軸を一時的に正規化するといいでしょう
    立方体を見るとよく分かりますが
  3. 対角線上にある円柱が最も簡単な例です
  4. 座標(-1,-1,-1)から
    (1,1,1)に延びる円柱の回転軸は(2,2,2)となります
  5. このベクトルの長さを用いて
    ある角から別の角への長さも出せます
  6. 他の2つの要素も求めなくてはなりません
  7. 回転軸の座標は分かりました
    次は回転角と円柱自身の長さが必要です
  8. これが円柱の長さを計算するthree.jsのコードで
    Vector3クラスを使っています
  9. Vector3では
    任意の点やベクトルの座標を設定できます
  10. Coordinate3と呼ぶ方が的確ですが
    意味が広くなります
  11. 他のCGシステムでも同様に呼びますが
  12. コード内容を見れば何を指すかが分かるでしょう
  13. 円柱の軸方向と長さを求めるために
    まず立方体の2つの角の位置を指定します
  14. 次にsubVectorsメソッドを使って
    ベクトルの引き算をしましょう
  15. 一方の点からもう一方の点へのベクトルを指定します
  16. three.jsでは膨大な量の演算がサポートされており
    引き算はその1つです
  17. 軸を設定すればこの最後1行が軸の長さを算出します
  18. 円柱を作成するのにはその軸の長さが必要になります
  19. この時点では回転軸と円柱の長さのみで
    角度はまだ入っていません
  20. しかしそれを計算する要素はすべてそろっています
  21. この円柱の軸を指定すれば
    まず回転前のy軸上の座標とのドット積を
  22. 次に回転後の座標とのドット積を
    求めることができます
  23. こうして必要な回転角度が分かります
  24. ドット積で2つの正規化ベクトル間の
    角度の余弦を求められると覚えましょう
  25. ですからここで円柱の軸を正規化し
    y軸のベクトルとのドット積を出します
  26. これで回転角度の余弦が分かります
  27. その余弦から角度を算出します
  28. 実はドット積を用いなくてもできるのです
  29. y軸とのドット積の計算は
    円柱軸のy成分を出すのと同じなので
  30. 単純に軸を正規化し
    このようなコードを設定することもできます
  31. しかしオブジェクトを大量に作るような
    重要なループでない限り
  32. 最初にお見せした方法で設定することをお勧めします
  33. あとで他の人がこのコードの確認や修正をする際に
  34. プログラミングの意図がより明確に伝わります
  35. さて必要な円柱軸、回転軸、
    円柱の長さの要素がそろいました
  36. ところで私はこのthetaが気になります
  37. 右手回転の確認には右手の法則が使えます
  38. もしくは設定してみて
    ダメならやり直す方式を取ることもできます
  39. ずいぶん前に
    古い業界誌の記事でこの方法があると知りました
  40. 自分と同じ方法を使う人がいると知って安心しました
  41. 回転を設定してみて
    オブジェクトが間違った方向に回転したら
  42. 反対の方向を試すというだけの方法です
    やってみてください
  43. 行列を設定してさらに15分ほどかけ正弦を求めても
  44. 正解率が50パーセント程度なのに対し
  45. より速く正確なのは
    どちらか試してみてその動きを確認する方法です
  46. とは言うものの長い変換動作の一部に回転が入る場合や
  47. 間違ったアルゴリズムから始めた場合は
    この方法は役に立ちません
  48. それでも計算が間違っていないと思えば
    どうぞ試してください
  49. 私はこの方式を演習で用いて
    回転角度を否定すべきと分かりました
  50. 右手の法則が当てはまるとか
  51. 他の法則が当てはまるなど考えるより
  52. 実際にやってみる方式で何が必要かすぐ分かります
  53. 私は-thetaを導くのに負の角度を考えず
    角度と軸方向の両方を返しました
  54. 結果は同じ回転となります
  55. 1つの軸を時計回りに回す時
  56. 軸の反対側は反時計回りに回るのと同じ原理です