894 :
名前は開発中のものです。:
すみません、古典力学についての質問です。
初期位置:y=150
加速度: acc = 10
初速度: spd = 50
速度: spd = spd + acc
床の位置:y=200に水平
上記の条件で画面下に向かって落下する物体があるとして、
更新後の座標はy = 150+50+10 = 210です。
当然めり込みが発生するんですけど、座標と速度の補正はどうすればいいんでしょうか?
床と物体との衝突は完全弾性衝突だとすると、単純に速度を反転させるだけでよいのでしょうか。
レベルの低い質問ですが、めりこみの補正がうまくいかず悩んでいます。
宜しくお願いします。
床にぶつかる場合は、座標を更新せず、速度の方向だけ変えるのが一番簡単じゃないの?
速度がめちゃめちゃ速い場合、床にぶつかってないように見えて、みっともないかも知れないけど。
この例だと、210で床にめり込んでしまうから、座標は更新せず、150のまま速度だけ-60にする。
896 :
894:2005/09/02(金) 22:15:30 ID:pblmt9Sp
レスありがとうございます。
したの図のような状況になってしまうので、できれば正しい位置に補正したいのですが、
その場合に速度を−60にしてしまうと跳ね返り後に不自然に加速してしまいます。
何か良い方法は無いのでしょうか?
○ ←本来はこっち
\ /
● \ / ←座標補正しないと軌道がずれる
__\_\/___
\/
>>896 それだと、挟み撃ち法かなんかで、正確な衝突位置と時刻を計算して、
その時刻での速度を計算して、床の面で反転させて移動先を求めるしかない気がする。
そんなメンドウなことやったことないから、上手くいくかわからないけど。
>>896 Y速度が50なんだから、バウンドした量も含めて縦に50移動してればOK
一度方眼紙に書いてみれば感覚がつかめると思う。
この場合、めり込んだ10だけ跳ね返ったy=190が正解だと思うよ。
速度は-50+(40-10)*10/50を減衰させればいいかな?(自信ない)
厳密ではないけど誤差を10分の1に小さくする方法はあるよ。
移動速度を10分の1にして、毎回10回計算する。
902 :
894:2005/09/03(土) 12:03:33 ID:zLnViSEh
みなさんありがとうございます。
>速度は-50+(40-10)*10/50を減衰させればいいかな?(自信ない)
これの(40-10)というのはどういう意味の計算なのでしょうか?
質問ばかりですみません
>>902 (壁に衝突するまでの距離−そこからの余剰分のベクトル)じゃ無いの?
いや、詳しくはわからんけど。
こういう風にめり込みを考慮した衝突を表現する場合、どういう力学の公式を適用すればよいのでしょうか?
こんな、ごく単純にボールが自然落下して床に当たって跳ね返るだけの処理で悩んでいるようでは
ゲームプログラマとしては才能がないのでしょうか・・・(´;ω;`)
問題点を判っててしかも放棄して無いんだから資質はあるんじゃね?
っていうかやけに単位が大雑把な気がするけど何のゲーム作ってるんだろ?
厳密な計算はいくらやってもキリが無いからある程度の妥協は必要だぞ。
>>904 > こんな、ごく単純にボールが自然落下して床に当たって跳ね返るだけの処理で悩んでいるようでは
>ゲームプログラマとしては才能がないのでしょうか・・・(´;ω;`)
ここはマジレスしてあげよう。
こういう問題で精度と計算結果が重要視されるのはシミュレーションや大学の論文。
で、ゲームプログラマーというかアミューズメント系はこういう場合ゲームシステムやプレイ感覚に与える心理的影響や
ゲームシステム上の不具合が発生しない方向を最初に検討してから対処する事になる。
つまり考え方とか方法論がはじめから違うのだ。
だから君が悩むべきは自分の作っているゲーム世界での影響を排除(あるいは許容する範囲の決定)であって
必ずしも数式的、物理的に現実に添うことではないのだよ。
#いまだプロでなくアマチュアであってなおかつ学生であるのなら悩んで当たり前だから、悩む事自体を楽しめるようになりたまえ。
>>906 言ってることは至極真っ当だが言い方がエラいムカつく
活気があってよろC
しかしこの後、いつも通り2ヶ月のスレスト
それをあえて俺が910ゲット
9.11get
912 :
894=904:2005/09/05(月) 09:54:08 ID:JI8n54ag
みなさんありがとうございます。
結局、めり込みを考慮した衝突と反射に関しては簡単には計算できない、という事でよろしいのでしょうか。
自分的にもここで悩んでても仕方がない気がしてきたのでネットでペナルティ法やAB法というのを調べて実装してみたいと思います。
ありがとうございました。