Classiclll's Blog

an old boy

かざぐるま - クラフト紙と鋏の習作 EtudeOfPinWheel

イメージ 1

かざぐるま - クラフト紙と鋏の習作 EtudeOfPinWheel by Processing(Proce55ing)

メチャ重いっす (MacMiniG4では辛くなってきた)



思いのほか時間がかかった(いつものこと)のは、先週末の休日出勤と、鋏のロジック(クラフトペーパモデルの一部分だけ、斜めに切れ込みを入れる処理)が【本当に】ややこしかったため。

端はつかめないが、マウスを動かすと視点が変わり、間をあけてクリックすればシーンが進み【かざぐるま】を作れる。

これはまだ【曲げメッシュ】。
→【表裏の図柄】がついてはじめて、曲げられる【千代紙】となる。
→折り目を【しごいて】【折り癖】をつけることができてはじめて、【折り紙】となる。
→折り曲げられた紙の表面にタイプされた文字が張り付いてはじめて、立派な【タイプライター用紙】となる。

でも、まずはクラフトペーパーの収束計算の効率向上が最大課題。
拘束条件の表現、拘束の程度による演算順序の最適化、収束過程における加速係数の調整、等、試行錯誤ネタ満載。
ゆっくりやろう。
/*
 [class] CraftPaper
                    9/8/2006 by Classiclll
      the model of a craft-paper with a scissors
 [extended from]
 class Loc;  the model of a 3D location (& vctor)
 [members]
 int ni, nj      メッシュの列数と行数
 Rods rods     構成ロッドのリスト
 Joint[][][] joints   ジョイントの配列(切った箇所は二つに分かれる)
 Loc acc       内部メンバー
 [constructer]
 CraftPaper(int ni, int nj, Loc at)     一辺10のni×njメッシュを位置atに作る
 CraftPaper(int ni, int nj, Loc at, float len) 一辺lenのni×njメッシュを位置atに作る
 [methods]
 void accel(Loc acc)
 void fixOnto(Loc at, Loc dir)
 void fixOn(Loc at, Loc dir)
 void fixAt(int i, int j, Loc at)
 void limitAll()
 boolean isIndex(int i, int j)
 void cutAt(Joint j0, int di, int dj)
 void cutAt(int i, int j, int di, int dj)
 void nextState()
 void draw()
*/

【注意!】
class Loc は(いくつかのバグ修正、というか手抜き手当とともに)機能拡張している。まだ、暫定版
 Loc変更点の覚え書き
  1.今まで左ネジ系だった!>右ネジ系に変更・・・corss積の符号を逆にした
  2.一次従属性の判定メソッド,isOnSameLine()追加
  3.ついでに同一方向の一次従属性判定メソッド、isSameDirection()追加
  4.任意のベクトルとの間の余弦を得るメソッド、cosine()の手抜きを改修
    (計算誤差なのか内積が1を超える場合があった>一次従属、あるいはゼロベクトルへの対応)
  5.任意のベクトルとの間の内(外)挿ベクトルを求めるメソッド、interpolate()を追加



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