座標系

座標系と座標変換は、coordinatesクラスで表現される。 4*4の同次行列表現の代わりに、 Euslisp内で座標系は、高速性と一般性のために 3*3の回転行列と3次元位置ベクトルの組で表現される。




coordinates [クラス]


  :super   propertied-object 

:slots (pos :type float-vector
rot :type array)


位置ベクトルと3x3の回転行列の組みで座標系を定義する。


coordinates-p obj [関数]

objcoordinatesクラスかまたはそのサブクラスのインスタンス のとき、Tを返す。


:rot [メソッド]

この座標系の3x3回転行列を返す。


:pos [メソッド]

この座標系の3次元位置ベクトルを返す。


:newcoords newrot &optional newpos [メソッド]

newrotnewposでこの座標系を更新する。 newposが省略された時はnewrotにはcoordinatesのインスタンスを 与える。 この座標系の状態が変化するときはいつでも、このメソッドを用いて新しい 回転行列と位置ベクトルに更新するべきである。 このメッセージはイベントを伝えて他の:updateメソッドを呼び出す。


:replace-coords newrot &optional newpos [メソッド]

:newcoordsメソッドを呼び出さずにrotposスロットを変更する。 newposが省略された時はnewrotにはcoordinatesのインスタンスを与える。


:coords [メソッド]


:copy-coords &optional dest [メソッド]

もしdestが与えられなかったとき、:copy-coordsは同じrotpos スロットを持つ座標系オブジェクトを作る。 もし、destが与えられたとき、dest座標系にこの座標系のrotとposを コピーする。


:reset-coords [メソッド]

この座標系の回転行列を単位行列にし、位置ベクトルをすべてゼロにする。


:worldpos [メソッド]



:worldrot [メソッド]


:worldcoords [メソッド]
このオブジェクトのワールド座標系における位置ベクトル・回転行列・座標系 を計算する。 その座標系は、いつもワールド座標系で表現されていると仮定され、 これらのメソッドは簡単にposrotselfを返すことができる。 これらのメソッドは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を左から掛ける。 もしwrtcoordinatesの型であるとき、wrt座標系で表現される transは最初にワールド座標系の表現に変換され、左から掛ける。


:move-to trans &optional (wrt :local) [メソッド]

wrtで表現されるtransでこの座標系のrotpos を置き換える。


: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 である。 axiswrt座標系で表現されていると考える。 よって、もしwrt:localaxis: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の同次行列表現に変換して返す。



\begin{emtabbing}
{\bf :init}
\it\&key \= :pos \hspace{8mm} \= \char93 f(0 0 0)...
...ist of (ind . value) pair \\
\> :name \> name property \\
\rm
\end{emtabbing}

このcoordinatesオブジェクトを初期化し、rotposを設定する。 それぞれのキーワードの意味は、以下に示す通りである。
: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 行列(posrotを同時に指定)
:coords
coordsからrotposをコピーする
:name
:name値を設定する。
:angle:axisと組みで唯一使用することができる。 その軸は:wrt座標系で決定される。 :wrtと関係なしに:Eulerはローカル座標系で定義されるオイラー角 (az1, ayaz2)をいつも指定する。 また、:rpyはワールド座標系のz, yx軸回りの角度 を指定する。 :rot, :Euler, :rpy, :axis, :4X4の中から2つ以上を連続で指定することは できない。しかしながら、指定してもエラーは返さない。 axis:angleパラメータには列を指定することができる。 その意味は、与えられた軸回りの回転を連続的に処理する。 属性とその値の組みのリストを:propertiesの引き数として 与えることができる。これらの組みは、この座標系のplistにコピーされる。


2016-04-05