座標系
座標系と座標変換は、coordinatesクラスで表現される。
4*4の同次行列表現の代わりに、
Euslisp内で座標系は、高速性と一般性のために
3*3の回転行列と3次元位置ベクトルの組で表現される。
coordinates [クラス]
:super propertied-object
:slots (pos :type float-vector
rot :type array)
-
- 位置ベクトルと3x3の回転行列の組みで座標系を定義する。
coordinates-p obj [関数]
-
-
objがcoordinatesクラスかまたはそのサブクラスのインスタンス
のとき、Tを返す。
:rot [メソッド]
-
-
この座標系の3x3回転行列を返す。
:pos [メソッド]
-
-
この座標系の3次元位置ベクトルを返す。
:newcoords newrot &optional newpos [メソッド]
-
-
newrotとnewposでこの座標系を更新する。
newposが省略された時はnewrotにはcoordinatesのインスタンスを
与える。
この座標系の状態が変化するときはいつでも、このメソッドを用いて新しい
回転行列と位置ベクトルに更新するべきである。
このメッセージはイベントを伝えて他の:updateメソッドを呼び出す。
:replace-coords newrot &optional newpos [メソッド]
-
-
:newcoordsメソッドを呼び出さずにrotとposスロットを変更する。
newposが省略された時はnewrotにはcoordinatesのインスタンスを与える。
:coords [メソッド]
-
-
:copy-coords &optional dest [メソッド]
-
-
もしdestが与えられなかったとき、:copy-coordsは同じrotとpos
スロットを持つ座標系オブジェクトを作る。
もし、destが与えられたとき、dest座標系にこの座標系のrotとposを
コピーする。
:reset-coords [メソッド]
-
-
この座標系の回転行列を単位行列にし、位置ベクトルをすべてゼロにする。
:worldpos [メソッド]
-
-
:worldrot [メソッド]
-
-
:worldcoords [メソッド]
-
-
このオブジェクトのワールド座標系における位置ベクトル・回転行列・座標系
を計算する。
その座標系は、いつもワールド座標系で表現されていると仮定され、
これらのメソッドは簡単にposとrotとselfを返すことができる。
これらのメソッドはcascaded-coordsクラスと互換性がとられている。
cascaded-coordsではワールド座標系での表現と仮定していない。
:copy-worldcoords &optional dest [メソッド]
-
-
最初に、ワールド座標系が計算され、destにコピーされる。
もし、destが指定されてないとき、新たにcoordinates
オブジェクトを作る。
:rotate-vector vec [メソッド]
-
-
この座標系の回転行列によってvecを回転させる。すなわち、
この座標系で表現される方向ベクトルをワールド座標系における表現
に変換する。
この座標系の位置は、回転に影響を与えない。
:transform-vector vec [メソッド]
-
-
この座標系で表現されるvecをワールド座標系の表現に変換する。
:inverse-transform-vector vec [メソッド]
-
-
ワールド座標系におけるvecをローカル座標系の表現に逆変換する。
:transform trans &optional (wrt :local) [メソッド]
-
-
wrt座標系で表現されるtransによってこの座標系を変換する。
transは座標系の型でなければならないし、wrtは
:local, :parent, :worldのキーワードあるいはcoordinatesの
インスタンスでなければならない。
もしwrtが:localのとき、transをこの座標系の右
から適用する。もしwrtが:world, :parentのとき、
transを左から掛ける。
もしwrtがcoordinatesの型であるとき、wrt座標系で表現される
transは最初にワールド座標系の表現に変換され、左から掛ける。
:move-to trans &optional (wrt :local) [メソッド]
-
-
wrtで表現されるtransでこの座標系のrotとpos
を置き換える。
:translate p &optional (wrt :local) [メソッド]
-
-
このオブジェクトの位置をwrt座標系で相対的に変更する。
:locate p &optional (wrt :local) [メソッド]
-
-
この座標系の位置をwrt座標系で絶対的に変更する。
もし、wrtが:localのとき、:translateと同一な
効果を生む。
:rotate theta axis &optional (wrt :local) [メソッド]
-
-
axis軸回りにthetaラジアンだけ相対的にこの座標系を回転させる。
axisは、軸キーワード(:x, :y, :z)あるいは任意のfloat-vector
である。
axisはwrt座標系で表現されていると考える。
よって、もしwrtが:localでaxisが:zであるとき、
座標系はローカル座標系のz軸回りに回転される。
もしwrtが:world, :parentであるとき、ワールド座標系のz軸回りに
回転される。
言い換えると、もしwrtが:localのとき、
回転行列はこの座標系の右から掛けられる。
そして、もしwrtが:worldあるいは:parentのとき、
回転行列は左から掛けられる。
wrtが:worldあるいは:parentでさえ、
この座標系のposベクトルは変化しない。
本当にワールド座標系の軸回りに回転するためには、
回転を表現するcoordinatesクラスのインスタンスを
:transformメソッドに与えなければならない。
:orient theta axis &optional (wrt :local) [メソッド]
-
-
rotを強制的に変更する。:rotateメソッドの絶対値版である。
:inverse-transformation [メソッド]
-
-
この座標系の逆変換を持つ座標系を新しく作る。
:transformation coords (wrt :local) [メソッド]
-
-
この座標系と引き数で与えられるcoordsとの間の変換を作る。
もし、wrtが:localであるとき、ローカル座標系で表現される。
すなわち、もしこの:transformationの結果を:transformの引き数として
wrt=:localと一緒に
与えたとき、この座標系はcoordsと同一な座標系に変換される。
:Euler az1 ay az2 [メソッド]
-
-
オイラー角(az1, ay, az2)で表現される回転行列をrotに
設定する。
:roll-pitch-yaw roll pitch yaw [メソッド]
-
-
ロール・ピッチ・ヨー角で表現される回転行列をrotに設定する。
:4x4 &optional mat44 [メソッド]
-
-
もし、mat44として4x4行列が与えられるとき、3x3回転行列と3次元位置ベクトル
の座標表現に変換される。
もし、mat44が与えられないとき、この座標系の表現を
4x4の同次行列表現に変換して返す。
-
- このcoordinatesオブジェクトを初期化し、rotとposを設定する。
それぞれのキーワードの意味は、以下に示す通りである。
- :dimension
- 2あるいは3 (デフォルトは 3)
- :pos
- 位置ベクトルを指定する (デフォルトは #f(0 0 0))
- :rot
- 回転行列を指定する (デフォルトは単位行列)
- :Euler
- オイラー角として3つの要素の列を与える
- :rpy
- ロール・ピッチ・ヨー角として3つの要素の列を与える
- :axis
- 回転軸 (:x,:y,:z あるいは任意のfloat-vector)
- :angle
- 回転角 (:axisと一緒に使用)
- :wrt
- 回転軸を示す座標系 (デフォルトは :local)
- :4X4
- 4X4 行列(posとrotを同時に指定)
- :coords
- coordsからrotとposをコピーする
- :name
- :name値を設定する。
:angleは:axisと組みで唯一使用することができる。
その軸は:wrt座標系で決定される。
:wrtと関係なしに:Eulerはローカル座標系で定義されるオイラー角
(az1, ayとaz2)をいつも指定する。
また、:rpyはワールド座標系のz, yとx軸回りの角度
を指定する。
:rot, :Euler, :rpy, :axis, :4X4の中から2つ以上を連続で指定することは
できない。しかしながら、指定してもエラーは返さない。
axisと:angleパラメータには列を指定することができる。
その意味は、与えられた軸回りの回転を連続的に処理する。
属性とその値の組みのリストを:propertiesの引き数として
与えることができる。これらの組みは、この座標系のplistにコピーされる。
2016-04-05