‘World Tester’のエントリ

恒例の年越しロビー。結構多くの人がいらっしゃっていてありがたいです。


てことで年も変わったので,物理シミュレータ World Testerを公開。略すとWTになるのは偶然ってことで。目指せピタゴラ装置! なんだけどまだまだ先は長い。

毎回一番悩むソフト名前を考えてみる。別に大したソフトでもないので適当でいいんだけど,適当なのが難しい。で,これは! と思った名前は,Googleで調べてみると大抵既にある。考えてみると「Weather Typing」というのは,簡単な単語の割には(日本に限れば)他に見つからないわけで,結構すごい。

物理シミュレーションの実装はほぼ完了。あとはタイトルとアイコンか,という感じでアイコンエディタを起動。したのだが,Visual Studio 2005の[色の設定]ダイアログがどうしようもなくバグっている。アイコンの表示されている領域をクリックするたびにプロパティウィンドウと交互に点滅したり消滅したり,フローティングにすると色項目がなくなって点滅し続けるし。アイコンエディタは何か別のソフトを使うしかないか。

調子に乗ってビリヤード。

2005121901

Visual Studio2005インストール完了。少しは軽くなっているかと思ったけどやっぱり重かった。


円柱-箱とトーラス-箱の当たり判定をサポート。これで当たり判定は一通り実装できた。次は世界のシリアライズか。

円柱-レイとトーラス-レイの当たり判定をサポート。トーラス-レイは結局4次方程式を解く必要があるということで解の公式を勉強したり。


MSDNの更新完了。これで来週Visual Studio2005がダウンロードできるようになる,のか?

剛体シミュレーション。操作性を考えてみた。まずはマウスで物体を動かしたいので,2Dの座標値を3Dのレイに変換する方法を調べる。今までビューポート変換とか透視変換とか何となく扱ってきたのだが,このおかげでちゃんと理解できた。

で,それを調べていて,ビューポートを使えば画面分割が簡単にできるというのを知ったので,調子に乗ってステレオグラムにしてみた。下の画像を交差法で見ると立体に見える。これが動画で動いているのを見ると結構感動なわけだが,例によって静止画なのでいまいち。

2005112701

ただ,ステレオグラムは動画を裸眼立体視できる人にはいい感じだけど,そんな人はあんまりいないと思うので公開時は泣く泣く外すか。オプションで残しとこうかなあ。

ともあれ,あとは当たり判定を残り4種類ほど実装すれば最初の構想はほぼ完成。一番やりたかったドミノをマウスで並べて倒すゲームもできるし。

ようやくトーラスとトーラスの当たり判定ができた。ネット情報などいろいろ合わせ,結局点と円の最短距離計算を何回か繰り返し求めるという方法で現実的な計算量になった。

てところで床,球,箱,円柱,輪っかの相互当たり判定14種類のうち11種類が完成。そろそろ操作性を考える時期かも。


いきなりハードディスクが止まる。何度か起動を繰り返すとようやく正常起動した。とりあえずバックアップを取って様子見。

掲示板の話。DXGetErrorString8がUnknownを返してくるとは。元のコードも表示するようにしておかないとエラーコードが分からなくなってしまうという教訓ということで。


トーラスとトーラスの距離算出について考えているのだが,なかなか奥が深い。ネットでもなかなか見つからないし。結局連立2次方程式を解くしかないのか?

トーラス(輪っか)を実装中。で,トーラスと球,トーラスと円筒の当たり判定は割とすぐにできたので,バイクっぽいものを作ってみた。

2005101001

上の謎物体は3つの物体でできている。1つ目は,大きな輪っかに円柱を刺して真ん中に固定のための球を配置したタイヤっぽいもの。これが前後で2つ。2つ目はタイヤを固定する小さな輪っか4つと擬似人の円柱からなる車体っぽいもの。あくまでも今サポートしている物体だけで表現しようとしたらこうなった。一応走る。

円柱同士の当たり判定を実装。素直に「円-円」「円-線分」「線分-線分」それぞれの当たり判定を実装してみたのだが,場合分けと外積ばっかりで見るからに遅そう。ま,そのうちもっといい方法を使うことにしよう。

まっちーさんに影の出し方を聞いたので早速実装してみる。なかなかいい感じ。

ついでにしばらく試していなかったドミノ倒しを試してみたらこっちもいい感じに倒れるようになっていた。

2005091901

10円玉の不思議現象は結局プログラムのバグっぽかった。地面と垂直な軸の回転を止めるために,1点接触を微小面積での接触と仮定しているのだが,座標系を間違っていた。で,結局回転させていても最終的には床に倒れる動作となった。

2005091801


今まで力積計算を運動量の保存則から計算していたが,実験的に力積を直接計算するようにしてみた。結局はペナルティ法に近い式になってしまったが,衝突と垂直抗力を区別しなくて良くなるのでだいぶすっきりする。


上の10円玉はMetasequoiaで作っている。先週シェアウェア登録したのだが,なかなか返信来ないなあ,と思っていたら自分でSPAMフォルダに入れてしまっていた。英語の名前,英語のタイトルだと何も考えずにSPAMに入れてしまっているので気をつけないと。

ともあれ,最近はSPAMも日本語のメールが多くなっていて分類が非常に難しい。ちなみに9/18に来たSPAMは全91通。いい加減メールアドレスを変えたいところだが,Denasuのアドレスは変えたくないので悩ましい。ウェザタイ関連のメールももしかしたらSPAM行きになっているものがあるかも知れない。

スマートボールとビリヤードをやってきた。というか物理シミュレーションのために観察してきたというか。


物理シミュレーションって結局は現実世界で現実世界をエミュレーションしようとしているわけで,ファミコンでファミコンエミュを作ってるような感じがしてある意味不毛なんだけど,ボールの重さが1つ1つ違うビリヤードはどうなるのかとか現実とはちょっと違うことを試せるのは十分価値があると思った。

円盤をサポート。まだ当たり判定が地面とだけだけど。

で,今日の不思議。10円玉を指ではじいて回転させるデモを作ってみたが,最後に直立してしまう。バグってるぽい気もするが,まっちーさんがいうには10円玉は完全な円盤ではないからじゃないか? とのこと。本来なら直立するのが正しいのだろうか。

もう一つ。回転が遅くなってくると机上を旋回し始める。これは以前のボーリング理論でいうと,回転が遅くなることで回転軸が斜めになって曲がってしまう,のか?

うーむ。まだすっきりしない。4号と相談してみよう。

夏休み。

前半は物理シミュレーションの高速化をやっていた。今まで衝突判定のスピードを考えず,直方体なら面6つと点8つに分解して「面と点」など汎用的な処理にしていた。で,それだと直方体4つくらいで10FPSまで落ちてしまったので,結局「直方体と床」とか「直方体と球」とか個別に判定するようにして,なんとか直方体15個で30FPSくらいまでにはなった。まだ遅いような気はするけど。

後半はサーブレットとJSPの勉強。仕事とも趣味とも全く関係ないけど,やっぱり広く浅く知るには試験勉強でしょ,ってことでSUNの試験を申し込んでいる。ぷよSUNが懐かしい。

あれ,夏休みに読み切る予定だったハリーポッターが10ページしか進んでない…。

物理シミュレーションはサイコロ+球までは再現できるようになった。そろそろ重くなってきたのでスピードを気にしていかないと。

実装していると物理の勉強では不思議に感じなかったことが不思議に感じてくる。とりあえずメモ。

  • 静止摩擦と動摩擦は係数が違うだけだと思っていたが,静止摩擦は力と反対方向,動摩擦は相対速度と反対方向という違いがある
  • 摩擦力は接する面積に関わらず一定。静止摩擦は垂直抗力に比例するが,動摩擦は速度に関わらず一定
  • 球が転がっている場合,地面に接している点は相対速度0なので普通の動摩擦は発生しない。この場合,地面と球の変形などで転がり摩擦という別の力が発生する(と考える)
  • 例えばボーリングなどで,地面と垂直の軸に沿って回転をかけた場合,前方に転がしてもカーブはしない。ボーリングの場合,投げる方向とその横向きに回転がかかるからカーブする

Darren ShanのDemonata(Lord Loss)を読み終わった。次は買ったけど積んであったハリーポッターだけど,電車で読むためにはまた上中下に分ける必要がありそうな分厚さ。

物理シミュレーションはドミノが倒れるところまでできてきた。但し倒れる際にめり込んでしまうのだが。

2005071001

白いのが主人公で悪のドミノをなぎ倒すゲーム。なのか?

まっちーさんに触発されてゴールデンウィーク辺りから物理シミュレーションの勉強中。てことでウェザタイの開発は全然やってないのでこの日記もあまり更新してなかったりする。

表示部分は,3Dシューティングを作ろうとしていたときのソースがあるのでそれを流用。ようやくサイコロが転がるくらいまできた。問題はこれで何を作るかということだが。とりあえず前からやりたかったドミノ倒しでも作ってみますか。