eus$ setq c1 (instance coordinates :init) #<coordinates #X339d9c 0.0 0.0 0.0 / 0.0 0.0 0.0> eus$ describe c1 plist=nil rot=#2f((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)) pos=#f(0.0 0.0 0.0) nil eus$ (send c1 :pos) #f(0.0 0.0 0.0) eus$ (send c1 :rot) #2f((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))というように,instanceという手続きでインスタンスを作り, 位置や方向の値をメソッドでとり出すことが可能です. posやrotを変更する手続きとしては,移動(locate)や回転手続き(rotate)があ ります.
eus$ (send c1 :locate #f(1 2 3)) #<coordinates #X339d9c 1.0 2.0 3.0 / 0.0 0.0 0.0> eus$ (send c1 :pos) #f(1.0 2.0 3.0) eus$ (send c1 :rotate (deg2rad 45) :x) #<coordinates #X339d9c 1.0 2.0 3.0 / 0.0 0.0 0.785> eus$ (describe c1) plist=nil rot=#2f((1.0 0.0 0.0) (0.0 0.707107 -0.707107) (0.0 0.707107 0.707107)) pos=#f(1.0 2.0 3.0) nil同様に,
eus$ (setq c2 (instance cascaded-coords :init)) #<cascaded-coords #X3394cc 0.0 0.0 0.0 / 0.0 0.0 0.0> eus$ (setq c3 (instance cascaded-coords :init)) #<cascaded-coords #X339118 0.0 0.0 0.0 / 0.0 0.0 0.0> eus$ (send c3 :locate #f(100 0 0)) #<cascaded-coords #X339118 100.0 0.0 0.0 / 0.0 0.0 0.0> eus$ (describe c2) plist=nil rot=#2f((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)) pos=#f(0.0 0.0 0.0) parent=nil descendants=nil worldcoords=#<coordinates #X3393ac 0.0 0.0 0.0 / 0.0 0.0 0.0> manager=#<cascaded-coords #X3394cc 0.0 0.0 0.0 / 0.0 0.0 0.0> changed=nil nil eus$ (describe c3) plist=nil rot=#2f((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)) pos=#f(100.0 0.0 0.0) parent=nil descendants=nil worldcoords=#<coordinates #X33907c 100.0 0.0 0.0 / 0.0 0.0 0.0> manager=#<cascaded-coords #X339118 100.0 0.0 0.0 / 0.0 0.0 0.0> changed=nil nilという具合に,親子関係をもつ座標系も定義でき,:locateや:rotateメソッド が使えます. 親子関係を持たせる手続きとして,:assocがあります. c2が親で,c3が子供という親子関係をもつと,c2を回転するとc3の場所と向き もいっしょに変更されます.親子関係をはずすメソッドが:dissocです. 親を回転した場合に,親子関係の末端がどのように移動するかの計算には, :worldcoordsメソッドを末端のインスタンスに送る必要があります. (毎回計算して計算時間の無駄が起こるのを防ぐため)
eus$ (send c2 :assoc c3) #<cascaded-coords #X339118 100.0 0.0 0.0 / 0.0 0.0 0.0> eus$ (send c2 :rotate (deg2rad 45) :z) #<cascaded-coords #X3394cc 0.0 0.0 0.0 / 0.785 0.0 0.0> eus$ (send c3 :worldcoords) #<coordinates #X33907c 70.711 70.711 0.0 / 0.785 0.0 0.0> eus$ (describe c3) plist=nil rot=#2f((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)) pos=#f(100.0 0.0 0.0) parent=#<cascaded-coords #X3394cc 0.0 0.0 0.0 / 0.785 0.0 0.0> descendants=nil worldcoords=#<coordinates #X33907c 70.711 70.711 0.0 / 0.785 0.0 0.0> manager=#<cascaded-coords #X339118 70.711 70.711 0.0 / 0.785 0.0 0.0> changed=nil nil eus$ (describe (send c3 :worldcoords)) plist=nil rot=#2f((0.707107 -0.707107 0.0) (0.707107 0.707107 0.0) (0.0 0.0 1.0)) pos=#f(70.7107 70.7107 0.0) nil:worldcoordsで返されるデータはcoordinatesのインスタンスです.