コンピュータグラフィックス
オイラーの定理とは オイラーの定理ってたくさんあるんですが、今回のオイラー定理は回転に関するものです。オイラーの定理 3次元空間の任意の回転 はある回転軸 の周りのある回転角 の回転である。回転行列を何回も掛けた回転行列でも任意軸回りの回転で表…
ScLerpとは 英語で「Screw Linear Interpolation」です。 日本語に無理やり訳すと「ねじ線形補間」とか「らせん線形補間」とかになるんですかね。 本記事では、そのまま ScLerp を書くことにします。 ねじパラメータを二重四元数に変換 本記事は、剛体変換を…
はじめに こちらの記事で「2次元の剛体変換を任意点回りの回転に変換」ができたので、 3次元でもできるかやってみました。 結論できません。できるとしたら、かなり限定的な条件を満たすときです。 まあ、でもせっかく計算したので、そのログとして本記事を…
はじめに 剛体変換って、「任意点回りの回転に変換できるんじゃないか」と思って、 まずは、2次元で計算してみるかって記事です。 2次元の剛体変換を任意点周りの回転に変換 剛体変換行列を とします。回転行列を 、平行移動行列を とします。任意点周りの行…
はじめに CGを勉強していると、よく見かける公式があります。 そういや、導出してなかったなって思ったので、導出することにしました。 どれも地道に計算するだけです。それもまた一興。 ベクトル3重積の公式 ベクトル3重積の公式 に関して以下が成り立つ。[…
はじめに 「ねじパラメータ」とは、英語で「Screw Parameter」のことです。この訳が一般的かは知りません。 英語のまま使うのが嫌だったので、無理やり日本語にしています。 直線をプリュッカー座標で表す 直線は方向ベクトル と直線上の点の位置ベクトル で…
単位四元数を回転軸と回転角に変換する 導出に関しては簡単なので、説明はせずに該当するglMatrix.jsのメソッドを貼り付けておきます。 /** * Gets the rotation axis and angle for a given * quaternion. If a quaternion is created with * setAxisAngle,…
回転行列の補間とは 回転行列 を回転行列 までパラメータ を使って補間することとします。 線形補間は意味ないことが分かるかと思います。 四元数の球面線形補間 に対する四元数を とします。 この時、補間に対応する変換を示す四元数を とします。 は のな…
四元数で示してみる 位置ベクトルを 、平面の単位法線ベクトルを 、2回の鏡映変換後の位置ベクトル は四元数を使って、で表せます。 この の右辺が回転を表すことを示します。この2つの平面のなす角を します。また、 とすると、 は以下のように書けます。よ…
鏡映変換とは 鏡映変換とは平面で折り返すことです。 位置ベクトルを 、平面の単位法線ベクトルを とすると、鏡映変換後の位置ベクトル はとなります。 鏡映変換を行列で表す 鏡映変換は行列で表すこともできます。 より、鏡映変換 は、以下のように表せます…
剛体変換を表す行列 剛体変換を表す行列 は以下のようになっています。 とします。 の行列から、回転変換と平行移動変換を抽出するのですが、そのためには回転が先か平行移動が先か指定する必要があります。 どちらを指定しても回転変換は同じですが、平行移…
はじめに 単位二重四元数が表す剛体変換を行列に変換することを考えます。 剛体変換には、「回転後、平行移動」と「平行移動後、回転」の2通りがありました。 それぞれで2通りの方法で行列に変換し、それが一致することを示そうと思います。なので、4通りの…
はじめに 剛体変換とは、回転と平行移動を組み合わせた変換です。 変換する位置ベクトルを とします。 このとき、変換する位置ベクトルは四元数で と表せ、二重四元数で と表せます。 回転軸の単位ベクトルを とし、回転角を とします。 このとき、回転変換…
定義 二重四元数は、以下のように定義されます。二重四元数の定義 二重四元数 を以下のように定義します。本記事では、二重四元数は のようにハットを付けます。 また、二重四元数には と の2種類の書き方があります。よく使われるのは の方です。 二重四元…
二重数の定義 二重数は、以下のように定義されます。二重数の定義 二重数は、複素数における が に代わって、 の代わりに であるという感じです。 別名は、双対数です。英語では、dual numbers です。二重数の和と積は、以下のように定義されます。二重数の…
はじめに 基本的にglMatrixを使います。 glMatrixに無いものを作成しました。 「回転行列」と「オイラー角」と「四元数」を相互変換します。 なお、オイラー角はABCのタイプ(回転軸がすべて異なるタイプ)のみサポートしております。 第1軸と第3軸が一致する…
はじめに 球面線形補間は四元数でよく使われますが、四元数だけのものではありません。 ベクトルの球面線形補間も結構使われます。 ベクトルの線形補間 まずは、ベクトルの線形補間を復習しましょう。 上図に示したようにベクトル をとります。 の先端を結ぶ…
はじめに 2つのベクトルを一致させる座標変換をクォータニオンを使って作る という記事を読んでまして、良い記事だなって思ったので自分用にまとめておきます。 アプリなら、入力者がマウスクリックで指定した三角形の法線方向をビュー座標系のz+にする場合…
回転行列から単位四元数への変換 回転姿勢を表す回転行列を単位四元数に変換します。 回転行列を とし、単位四元数を とします。 このとき、次の式が成り立ちます。(四元数による回転の式 参照)また、 は単位四元数なので、以下が成り立ちます。 の対角成分…
ジンバルロックとは wikipediaより引用です。 「航空宇宙分野の慣性航法システムのジャイロにおけるジンバルなど、3軸の全てに自由な運動がある場合は、 機体の回転によって3つのジンバルリングのうち2つの軸が同一平面上にそろってしまうジンバルロック(英…
四元数による回転の要件 が回転を表すためには、長さと角度と掌性を保存しなければなりません。 長さが保存されるのは、 について以下の等式が成り立つときです。原点から2点 と へ結んだ線分の角が保存されるのは、以下の等式が成り立つときです。掌性が保…
任意軸まわりの回転 単位ベクトル まわりに点 (位置ベクトル)を 回転した点を (位置ベクトル ) とすると、以下のようになります。 はロドリゲスの回転公式と言います。 任意軸まわりの回転の導出 を導出します。 下図を参考にして、 を分解します。 は同一円…
はじめに 四元数という複素数を拡張したような数を紹介します。 複素数の知識があったほうが良いとは思いますが、まあ無くとも大丈夫なはずです。 四元数ははっきり言って応用範囲が狭く、3次元の回転(CGやロボットの姿勢)のみでしか応用されていないように…
はじめに 本記事は、以前書いた透視投影変換行列 - 導出その2の投影に関する部分が分かりにくく疑問点が残ると思ったので、それを解決するために書きました。 本記事の大きな流れは、「標準的な透視投影について」、「透視投影変換行列についての考察」、「…
環境光 環境光はすべての方向から等しい強度でやってきます。よって、定数です。 平行光源 平行光源とは、無限遠方から単一の方向に向かって光を放射する光源です。 太陽のような平行であると考えられる光源のモデル化に使われます。 点光源 点光源とは、空…
次の線分を見る G0連続であるが、G1連続(接線)でない2つの曲線があります。 WebGL/OpenGLでこれらの曲線にある程度太さを持たせて描画することを考えてください。 その時、曲線を微小な線分に分割して、それを覆うような四角形(四角形ストリップ)で描画する…
透視投影とは ビュー座標系からクリッピング座標系への変換を投影変換といい、透視投影とはその1種です。 具体的には、空間上に錐台の視体積(視錐台)を定め、それを原点が中心とした辺の長さが2の直方体(標準視体積)へ移す変換のことです。 透視投影変換行列…
平行投影とは ビュー座標系からクリッピング座標系への変換を投影変換といい、平行投影とはその1種です。 具体的には、空間上に直方体(視体積)を定め、それを原点が中心とした辺の長さが2の直方体(標準視体積)へ移す変換のことです。 ビュー座標系の視体積が…
ビューポート変換とは 正規化デバイス座標系からデバイス座標系への変換のことです。 この変換は、もちろん行列によって行われますが、プログラムをすることって少ないと思います。 WebGLならgl.viewport(x,y, witdh, height) と呼びだすだけですし、他のグ…
直交座標系の変換 正規直交基底 を軸とする座標系上の点の位置 を、 この座標系と原点を共有する別の正規直交基底 を軸とする座標系に移す変換は、回転の変換となります。 それぞれの座標系における の座標値を、 と とすると、以下が成り立ちます。 より求…