Classiclll's Blog

an old boy

折り紙を【ちゃんと】考える(その2) on Processing (Proce55ing)

イメージ 1

折り紙を【ちゃんと】考える(その2) on Processing (Proce55ing)

前記事の「はこ」を折るには、
【作業台=滑らない板】と、【プレス板=滑る板】に加えて、【つままれた端=固定点】
のモデルがまず必要。
【つままれた端=一点拘束条件】
紙にどんな変位が加わろうが、その端は指定された位置にとどまり、結果として反力の形で紙に返される。折り紙なので、拘束点は自由に移動できなければならない。
 http://blogs.yahoo.co.jp/classiclll_jp/39848021.html かざぐるまはこのモデルの原型

【滑る板=境界平面を含む部分空間による拘束条件】
三次元空間は任意の二次元平面で二つの部分空間に分けられる。
滑る板は一方の部分空間と境界平面上では自由に動けるが、反対側の部分空間には移れない。
反対側の部分空間に飛び出す変位分はキャンセルされ、結果として紙に反力の形で返される。
 http://blogs.yahoo.co.jp/classiclll_jp/40385598.html 二回折りのプレス板はこのモデルの原型。

【滑らない板=境界平面を含まない部分空間による拘束条件】
滑らない板の【上】では、平面に沿った動きも制限(というか動かないように)される。
なので、反対側の部分空間に飛び出す変位分に加えて境界平面に沿った変位分もキャンセルされ、結果として反力の形で紙へ返される。
じゃあ、【部分空間と拘束条件の定義】がいる。
【部分空間】
境界平面が通る位置ベクトルpと、【正しい】部分空間を指し示す単位ベクトルdの二つで次のように定義できる。
     部分空間={x∈{三次元点}|(x-p)・d≧0}
【拘束条件】
任意の点xに対して変位Δが加わったとき、
  1.x+Δが【正しい】部分空間に入っていれば、Δは拘束されない。(上の定義参照)
  2.x+Δが【正しくない】部分空間に出る場合、
   飛出し部分についてはその全てと、平面上でdに直交する二つの単位ベクトルux、uyへのΔの射影を加えた、
     δ = (d・p - d・(x+Δ))*d  + f* (ux・Δ)*ux  + f* (uy・Δ)*uy
   だけ打ち消されて、反力の形で紙に戻される。(fは摩擦係数、0で滑り、1で止まる)
 #点による拘束からはΔそのものが反力の形で紙に返される。

チュートリアルにするか迷ったけど、解説が大変なのでガラクタ置き場に、【折り】の習作ー拘束条件のテストとして置いた。
クリックで、部分空間拘束と点拘束を切り替えられる。さらに、キーボードで
 'f'/'b' で 拘束点を前/後に動かせる
 's'/'n' で、拘束平面のスリップ性(Slip/Noslip)を指定できる
'r'/'l' で、拘束平面を回転できる。
 'x'   で、ボールを初期位置に戻せる


この後、やるべきことは、

【収束速度の向上】
いずれかの形で拘束された端点から反力が返されるので、変形させるための収束計算を拘束点から始めて、連結に沿って変位計算をすれば、収束速度の向上が見込まれる。
(本当にやるか?)

さらに、

前記事の「はこ」を折るには、【作業台=滑らない板】と【プレス板=滑る板】に加えて、

【重ね合わせる】
・好きな端をつまむ
・つまんだ端を移動して好きな端にあわせる(折る)
【折り立てる】
・折り立てる位置を決める(=プレス版を当てる)
・折り立てる(=当てたプレス版を【立て】て、紙を立てる)
【袋に開く】
・好きな端をつまむ
・もう一方の端をつまむ
・押し広げてプレスをかける

ことが出来なければならない。とすれば、、

第一端点を自由に選べる
第二端点も自由に選べる

ような CUI が必要になるかな。


Processing については、
日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
・山本徹(thoru)さんがFunProce55ingで解説してくれている。(【簡潔】で【わかり易く】、【楽しい】解説)
例題集は習作集と区別するためにこちらに置いている。
・P5のスケッチからアプレットを作り【ジオシティーズ】にアップする手順をまとめたので、参考に。