next up previous
Next: 21 三次元形状記述 Up: 20 座標系モデル Previous: 20.1 locate, rotate

20.2 親子関係の定義assoc,dissoc

親子関係を持たせる手続きとして,: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のインスタンスである.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日