ニートが頑張るブログ

ニートが現実逃避するために創作活動など色々とカオスに頑張ってみる
ニートが頑張るブログ TOP  >  Flash作成過程 >  マグネチックシミュレーション

マグネチックシミュレーション

ネオキューブっておもちゃがほしいです.
でもたかいのでニートには買えません.
よって自分でつくります.


Zキーでも玉追加できます.
たま~に運が良いと13個で20面体の頂点を形作って安定したりします.

磁力シミュレーション組み合わせ
i=0;
while( i < magnum-1 ) {
one=eval("mag"+i); //威張る1個目
j=i+1;
while( j < magnum ) {
two=eval("mag"+j); //威張る2個目
j++;

1個目と2個目の座標差
xx=one.rx-two.rx;
yy=one.ry-two.ry;
zz=one.rz-two.rz;

d=xx*xx+yy*yy+zz*zz;
これが距離です.
普通距離を出すなら
Math.sqrt(xx*xx+yy*yy+zz*zz)だけど
磁力は重力電磁力同様に逆二乗なので平方根イラネ.
3次元だからって何でもかんでも逆二乗の法則に
しすぎだぞ.この宇宙を設定したヤツは.

if(d<1000){ //衝突した場合
ここで衝突した場合の挙動を考える.
} //衝突した場合

vx=xx/d;
vy=yy/d;
vz=zz/d;
これが逆二乗ってこと

1個目加速
one.vx-=vx;
one.vy-=vy;
one.vz-=vz;
2個目は逆に加速 保存力
two.vx+=vx;
two.vy+=vy;
two.vz+=vz;
}
i++;
}


ルートでやるのはこんだけ. 
あとは各玉が加速度に応じて移動したものを
3次元座標変換にかけるだけです.


実際やってみると分かると思いますが,まだ全然挙動おかしいです.
衝突したとき加速度をリセットする~とかしてるので,
空中で浮いたまま停止したりします.アホス.
直そうとしたら余計に動かなくなったし
これはこれで面白いので,今回は途中経過ってことで.
てかこれモノポールになってる!?
うん無理だ開き直ろう.


玉追加を物凄い連打してると,たまに
衝突しないで振り子運動するやつとか楕円運動するヤツとか出てきます.
ものすごい勢いでスイングバイして彼方に吹っ飛んで行くヤツとか.
ロクに考えずに作ったのにそういう現実にある物理現象が
勝手に発生するのはなんかウレシイですね.

だから衝突時さえ直せばちゃんとしたモノになると思います.
それ以外の問題としては,本物と同じように
216個も玉を出したら,磁力の関係が23220通りにも
なってしまうこと.CPU死にますね.

それと,どうやって玉をつまんだりして動かせるようにするかですね.
今の所は上から落としてるだけだし.


多分このプロジェクトは頓挫.

関連記事
[ 2009/01/21 15:11 ] Flash作成過程 | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

月別カレンダー
10 ≪│2017/11│≫ 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -