wonderfl CHECKMATE 第2回目 (4) -実装3(連結線)-
2009/08/26 20:40 - AS3.0
前回は、頂点に対して落下とドラッグを実装するコードを見つけたという話でした。
頂点が具備すべき三つの仕様の残りの一つ、「隣接する他頂点との間隔を一定に保つ」について考えてみましょう。
っても、これも神様から天啓を授かっているのです。
バイブルの Chapter 8 EASING AND SPRINGING を見ましょう。
この章の Attaching multiple objects with springs という項目(P215~)の最後の部分に三つのボールをそれぞれバネ効果を持つ線で結ぶというスクリプトがあります(ダウンロードサンプルファイルは、フォルダ ch08 内の TripleSpring.as)。
このサンプルでは頂点が落下するようになっていませんが、重力がかかるようにすれば、バネなので、期待どおりの動きをさせることができるようになるはず。
ってなワケで、この線をジョイントクラスとして定義して、前回定義した頂点を連結してみます。
その際、問題となるのはどの頂点とどの頂点を連結するのか、ということですが、ここで前々回の画像分割の模式図を今一度見てみます。

この6個の四角形を構成する12個の頂点に重力がかかった場合、なるべくそれぞれの四角形が歪まないようにするためには、どのように芯を入れるか。
そのためには対角線にも芯を入れれば良いんでしょう。 前々回の drawTraiangles 用に指定した片方の対角線ではなく、二つともに。

対角線を入れるとはどういうことなのか。
左図の四角形 0143 だけに注目してください。 一つの四角形を構成する頂点は、他の三つの頂点すべてと連結しています。
今度は四角形 0143 と 1254 を一つながりで見てください。特に頂点1と4に着目してください。 すると、隣接するすべての頂点とジョイントでつなげる必要があるというが分かります。
これ以上どっか頂点を連結する必要があるのかどうか、というのは元ネタの jelly coke を見て、各自、研究してくださいませ。