「メモちらし」に関する日記(2)

<前

むしろあかるく てつくずをなげつけた

メモちらしのことですが、近似の精度が悪いために、理論上いける限界より先まで行き過ぎては理論上の最大より大きな力で激しく押し返され、またその先で限界を超えた押し返しを受けるという悪循環により振動が大きくなっていたようです。
数値の精度は近似の精度と比べて充分すぎるほどよいので、扱う数値を小さくすることで(微分による近似なので理論的には時間の区切りは限りなく細かくあるべき)、近似の精度が上がります。
そこで、数値を小数点以下2桁まで指定して細かく制御できるようにして、近似の精度を決めるスピードの値もファイルに記録するようにしました。
ついでに極端な吹っ飛び回避用に近付きすぎた粒子同士には反発力をかけないようにしたり、終了メニューも実装しました。
しかしアップは多少遅れます。
大体20日前後になると思います。

マザー3やってました。
何の説明もなく現れて何の説明もなく戦うことになるかなしきよせあつめが印象的でした。
何も言わなくてもわかるんですね。
それまでの経過で。
あと、マシュマロちゃんにジェネッタくん。
いいキャラです。

コンパスが出れば完璧

大神やってました。
いや、ここまでゼルダに似るとは。
今度はダンジョンですよ。
ダンジョンマップも名前を変えてちゃんとあります。
ダンジョン内の謎解きも、物を乗せている間だけオンになるスイッチや、蔦(結)がフックショットと同じ役割だったり、鍵つきドアと小さな鍵に対応するものがあったり。
そしてボスの女郎蜘蛛はカーレ・デモスですよ!!
カーレ・デモスは蔦を全部ちぎればコアが露出しますが、女郎蜘蛛は蔦を繋げば目玉が露出してダメージを与えられるようになります。
そして女郎蜘蛛はその役割までカーレ・デモスと同じなんですよ。
カーレ・デモスはマコレを食いましたが、女郎蜘蛛は梅太郎を食ってます。
そういえば北斗の拳のネタがあったり、「レッツロックベイビィ!」のにーちゃんが意外に早く出てきたのはビックリだったな。

そういえば、メモちらしで、粒子が多くなると手の付けられない暴走が始まる現象があるんですが、どうにも収め方が見当つかないです。
エクセルでの計算上ではほとんどの場合において収束するような係数の選び方をしたのですが、どうにも吹っ飛びそうにない状況で吹っ飛んでます。
粒子同士が極端に近付きすぎた場合には吹っ飛ぶことはありうるのですが、どうにもその条件に当てはまっていないのに段々振動が大きくなっていって全体を混乱させているようなのです。
それと、終了メニュー実装忘れてた。

CGIのページ統合

メモちらし公開しました!!
昨日書いたものから特に新たな機能は追加していません。

そうそう、そんでもって、ダウンロードページとCGIダウンロードページを統合しました。
前々からこの2つは統合したいと思っていたのですよ。

追加機能

メモちらし作ってます。
新しい機能は、編集をキャンセルする機能、シミュレーションスピードの変更、全ての粒子と腕を繋ぐ、条件に合う粒子全てと手を繋ぐ、世界の中心に帰る、特定の粒子の周りの腕全てのバネ定数を増やす機能、自分自身と腕を繋がない機能(というよりバグフィックス)、などなどです。
まあ、それぞれは簡単なので時間の問題ですな。
明日アップする予定です。

プレーステイションスリー

実験レポート書いてます。
メモちらし使ってます。
腕のバネ定数を可変にしてはみたんですが、やっぱり粒子が多いと腕が伸びきっちゃうんですよね。
それにバネ定数を極端に大きくしちゃうと減速が加速に追いつかず発散してしまうんですよね。
一個の粒子の暴走が全体を破壊しちゃうんです。
そうでなくともバネ定数をある程度大きくすると振動が大きくなりますし。
それと、バネ定数を0にすることで腕の削除も行えるようにしました。
この仕様変更に伴い、バネ定数も記録するようにセーブデータを拡張しましたが、前のデータとの互換性もあるので前のデータがそのまま使えます。

そういえばプレイヤーを捨て置いてとんでもない値段を吹っかけてきたプレステ3、あの高いのが劣化版で、まともな機能を備えたものだととてもいえない値段になるそうですね。
そもそもゲーム機として評価されたくないのならもっときっちりゲーム機離れさせておくべきなのです。
何が嬉しうてビデオの操作をゲーム機のコントローラでせにゃいかんのか。
あのコントローラ、ゲーマーにはなじみがあってもビデオを楽しむ人には正体不明の物体ですから。
いちいちゲームに使える新機能なんて追加しなくてよろし。
フランス語でおしっこを連想させるうぃーのリモコンよりもきっちりしたリモコンらしいリモコンを標準にしたらいいんじゃないのかと思うのですよ。
その上で、劣化版PS3のゲーム機として高すぎる値段より、完全版のBDプレイヤーとしての5桁の値段をアピールすべきだったと思うのですよ。

実際に使い始めて気付いた問題点

メモちらしです。
まず、ちらつくんですよね。
ええ、表示数が多くなるとかなり。
でまた、文字がでかすぎるんですよね。
サンプルから引っ張ってきたコードそのままだから適正な大きさの2倍ほどあります。
んで、そのせいで文字と文字が重なり合って読めなくなります。
そして、一番困ったのが、粒子数を増やすと腕一本の力じゃ抑えきれなくなること。
計算の都合上、反発力を距離に反比例する大きさにしていたのですが、こうすると反発力が遠距離で大きすぎるんですよね。
腕の力と反発力のつりあう距離が粒子を増やすごとにどんどん遠ざかるんですわ。
これを距離の2乗に反比例するようにすれば粒子間の距離の関係で腕の伸びる距離にはある程度限度ができるのですが、現状平方根計算を避けるためあえて1乗に反比例するようにしているんですよね。
まあ、粒子が100個程度ならどんな計算してもマシンパワーでなんとかなっちゃうみたいなのでそれを期待して書き換えるというのもありなんでしょうが。

メモちらし出来上がり

Bomber丸Worldの裏話を更新しました。
このゲームを作るに当って一番大切にしたいこと。「作りたいように作る」
感動の押し付けはまっぴらごめんだ。「死は死だ」
もしかしたら部外者がラスボスになるかも!?「ラスボスってつまりなんだ?」

メモちらしも、昨日書いた4項目もきっちりできて、とりあえず使えるようになりました。
どうにも項目の削除周りの挙動が怪しいのですが、エラー回避のコードを書いただけで全く問題なく動くようになったみたいなので下手にいじらずほっときます。

メモちらし

メモちらし、ついにテキストの編集とか表示ができるようになりました。
想像通りといえば想像通りなんだけど、思ったより期待通りで、なんだか嬉しくなってきます。
残された課題は、
・メモの再編集
・世界の中心
・画面のスクロール
・セーブ・ロード
などなど。

1147012005.png

収束性

物理シミュレーションにより動かすプログラムがちゃんと動くかどうかエクセルで数値を入れて計算したらすぐ発散して何もかもが吹っ飛んでしまうという結果が出ました。
数値計算によるシミュレーションではどうしても離散値しか取れないから、境界をまたいで変化してしまうと境界付近での動きが無視されて現実にはありえない動きを見せるんですよ。
まあ、数値計算の理論と実際に動かした結果もまた違うものなんですけどね。
そもそもエクセルで計算した分には距離がマイナスというケースも計算していたんですが、プログラム上では意味があるのは絶対値だけなので発散はしないその場合だと発散はしないんですよね。
まず、摩擦を入れないと絶対に収束しないのです。
それでまあ、エクセル上でいろんな数値を入れて試した結果、紙面上で求めた理論の式とはやや違う形になり、係数もある程度増えました。
紙面上での計算は理想条件を仮定しているけど実際には理想であるはずがありませんものね。
しかしどうしても残る問題が、収束の遅さです。
こればかりはなかなか式の係数をいじるだけじゃうまくいかなかったんです。
そこで早送りでシミュレーションして見かけ上早くするという手法をとることにしました。

そんなわけでこの部分のプログラムはメモちらしに入れることができました。

そうそう、Distanceメソッドの誤差についてはhttp://d.hatena.ne.jp/mifumi323/20060504で触れておきました。

yanesdkの誤差

今日は必要に迫られてフロッピーディスクドライブを買いに行きました。
そうしたら、なんか電車にしても店にしても、やたらと人がいるんですよね。
考えてもみたら今日は大連休の初日でした。
そうそう、FDDを買うついでに大神も買ってきました。

それはそうと、昨日言っていたソフトの名前、決まりました。
その名も、「メモちらし」。
そして、早速プログラムに取り掛かったのですが、ベクトルを作るのが面倒くさくてyanesdkからVector2Dを引っ張ってきたら、たまたまDistanceメソッドの近似計算を見つけて、その程度の近似なのか数値的に計算してみました。
それが今日の画像です。
理論的にその程度の精度を持つかはまた後で改めて計算することにしましょう。

1146668128.png

書き散らかすソフト

なんか新しいソフト考えてみました。
テーマは書き散らかすこと。
思いついたアイディアをとにかく乱雑にでもいいから適当な場所にメモとして書いておく。
断片的に思いついたアイディア一つ一つをいちいちメモ帳を開いて書いてファイルに保存するのは面倒だしファイルの数がやたら増えるしいざとなって必要な情報が見つけづらかったりするので、乱雑に書き散らかし、必要になったら特定の語を含むメモをかき集めることができるようにするのです。
具体的な仕様については、
・一つのメモは一つの粒子として扱う
・メモはテキストを始め、画像なども使える
・粒子同士には距離の二乗に反比例する反発力が働く
・腕で繋がれた二つの粒子間には距離に比例した引力が働く
・メモの存在する画面を「世界」と呼ぶ
・唯一つ、質量無限大の粒子「愛を叫ぶ場所」が世界の中心にある
・愛を叫ぶ場所は、条件を満たす粒子全てと腕を繋ぐことができる
・粒子が運動するときには速さの単調増加関数で表される摩擦力が働く
とりあえず、C++だとIDEを使ってもそれなりの形になるまで時間がかかるし、VBだと処理速度の遅さやテキストと画像を同じように扱うのが面倒ということで、消去法でC#を使うことになりそうです。

<前