Menu

#24 :move-to をコピーにする

1.0
open
nobody
None
2013-05-16
2013-05-16
No

[#23] と連動していますが、:replace-coordsでコピー渡しできるようになったら、
:move-to 内部の:newcoordsを使っている部分を:replace-coordsに置き換えると、
以下の問題がなくなります。:move-to が参照渡しである動作を前提としているコードはほぼ無いように思います。

(send a :move-to b :world)のあとaやbのcoordsを動かすと,bやaのcoordsも同時に動く.:localの時はaやbを動かしても動かない.
:worldを指定すると:newcoordsになるため。-> コピーに変更した方が良くないか??

91.jskrbeusgl$ (setq a (make-coords))

<coordinates #X89243f8="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

92.jskrbeusgl$ (setq b (make-coords :pos (float-vector 300 0 0)))

<coordinates #X8924a58="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

93.jskrbeusgl$ (send a :move-to b :world)

<coordinates #X89243f8="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

94.jskrbeusgl$ a

<coordinates #X89243f8="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

95.jskrbeusgl$ b

<coordinates #X8924a58="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

96.jskrbeusgl$ (send a :translate #f(100 0 0))

<coordinates #X89243f8="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

97.jskrbeusgl$ a

<coordinates #X89243f8="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

98.jskrbeusgl$ b

<coordinates #X8924a58="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

99.jskrbeusgl$ (send a :move-to b)

<coordinates #X89243f8="" 800.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

100.jskrbeusgl$ a

<coordinates #X89243f8="" 800.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

101.jskrbeusgl$ b

<coordinates #X8924a58="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

102.jskrbeusgl$ (send a :translate #f(100 0 0))

<coordinates #X89243f8="" 900.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

103.jskrbeusgl$ a

<coordinates #X89243f8="" 900.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">

104.jskrbeusgl$ b

Related

Tickets: #23

Discussion

  • Kei Okada

    Kei Okada - 2013-05-16

    マニュアルにはなんて書いてあるのかな.

     
  • Kei Okada

    Kei Okada - 2013-05-16
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1,4 +1,4 @@
    -#23 と連動していますが、:replace-coordsでコピー渡しできるようになったら、
    +[#23] と連動していますが、:replace-coordsでコピー渡しできるようになったら、
     :move-to 内部の:newcoordsを使っている部分を:replace-coordsに置き換えると、
     以下の問題がなくなります。:move-to が参照渡しである動作を前提としているコードはほぼ無いように思います。
    
     

    Related

    Tickets: #23

  • Yohei Kakiuchi

    Yohei Kakiuchi - 2013-05-16

    読み方によっては、参照渡しと読める気がします。ですが、wrtの指定によって挙動が違います。
    coordinatesでwrl=:worldの場合と、cas-coordsでwrl=:parentの場合だけ参照渡しで、それ以外は
    座標変換が入るので、コピー渡しと同様になっています。

    以下、マニュアル抜粋。
    :move-to trans &optional (wrt :local)
    wrt で表現される trans でこの座標系の rot と pos を置き換える。

     
  • Kei Okada

    Kei Okada - 2013-05-16

    なるほど.
    なんとなく,当初のメモリを節約して,スピードを早くする,という設計思想で参照渡しになっているのかな.どうしましょうか.

     

Log in to post a comment.