- - PR -
四角い画像を円として認識させる
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-09-01 21:54
あいつーさん、びしばしさん、H2さん、a-sanさん、アドバイスありがとうございます。
とりあえずシンプルな円のみにして、試しています。いいところまでいっています。バブルの動きは、落下して跳ねるという運動です。ただし、collision()メソッドについて、新たな問題が出てきました。それは、初めのうちは、2つのバブル間での距離の問題なので、うまく跳ねていますが、途中から、3つ以上のバブルが重なり、たくさんのバブル間での問題になってきてしまいます。そんなとき、まず2つのバブル間で反発しもう一つとのバブル間で反発し、で、よって、重なりができるように動いてしまうのです。これを回避する方法を考えたのですが、おそろしいループしか頭に浮かびません。(でも最高いくつまで重なるのかなあ) ですので、みなさんのアドバイスに頼るしかなさそうです。お忙しい中かもしれませんが、何とかお願いします。(そんなに急いではいないので、時間があるときで結構です。) でも、跳ねるところまではきました。すごく嬉しいです。
[ メッセージ編集済み 編集者: ゴールデン 編集日時 2004-09-01 21:58 ] [ メッセージ編集済み 編集者: ゴールデン 編集日時 2004-09-01 22:22 ] | ||||
|
投稿日時: 2004-09-01 23:27
collision()はすごく雑な計算しかしてません。(速度を入れ替えているだけ)
実際にはもっと厳密な計算をしなければいけないです。 前回のコマから今回のコマの間でぶつかっているので、 ぶつかった時刻を計算し、衝突後の速度だけではなく、位置も計算する必要が あります。 また、最初にぶつかるバブルがどれなのかも特定する必要があります。 最初にぶつかったバブルから順番に1つづつ処理していけば、 かなりイイ線までできるのではないかと思います。 衝突が多くなると恐ろしく動きが鈍くなるでしょうが。 その前に、速度を遅くしたり、時間間隔を短くすれば、多少はマシになると思います。 こーいうシミュレーションの応用って色々考えられます。 3次元にするとか、大きさや質量を変えるとか、回転も考えるとか、 衝突計数を考慮するとか、風を吹かすとか。 他に、衝突のたびに音を出したり、色を変えたり、2つのバブルを結合して 1つのバブルにするのも面白いかもしれません。 他に、バブルを太陽や惑星としてみるとか、ビリヤードの球にするとか・・・。 | ||||
|
投稿日時: 2004-09-02 00:11
今日はわりと時間があったので、3〜4時間たっぷりパソコンができました。ただし、行き詰まってからは空回りですが…。これからの方向としては、@バブルを当初のとおり、ぼかしを入れて立体感のあるものにする。Aバブルばかりでは面白くないので、バブル30個の中にイラストをいつだけ入れ込み、そのイラストの輪郭線とバブルとの接触を考えようと思っています。
本日はこれにて終了します。またよろしくお願いします。 | ||||
|
投稿日時: 2004-09-02 20:39
バブルを軽く跳ねるように動かすことからちょっと離れて、次の段階に進もうと思います。バブルをただの円ではなく、立体的なバブルにするために、Alfa値を操作して透明感のあるバブルにしたいのですが、setColor()メソッドでは、RGBしか操作できないのですね。何か良い方法はあるでしょうか。それとも、そういうことをするよりも、今回のアプレットのバックは単一色なので、バブルの画像を画像ソフトで透明感があるように作って、教えていただいたcollision()メソッドで、輪郭線を計算して、バブルが跳ねるようにした方が早いのでしょうか。(画像を作るのが面倒そうなので、できればプログラム内で作りたいと思っていますが…)よろしくお願いします。
| ||||
|
投稿日時: 2004-09-07 02:13
BufferedImageを作り、それを描画してはどうでしょう?
| ||||
