ゲームのための物理(力学)
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
02/04/08 17:38ID:dlksSYkA例えば、坂道を転がる球の加速度だったら。
その球の密度が一様ならば、慣性モーメントは(2/5)MR^2なので
dV/dt = 5*g*sinθ/7;
と表せるよとか。
他にも剛体運動、力積とか語ってください。
0136名前は開発中のものです。
02/04/14 19:40ID:???2ch初心者なの丸出しじゃん!
0137127
02/04/14 20:05ID:???ソースまで出してもらって感謝です。
こちらの実装も、処理の流れは>>135とほぼ同じです。
接触判定の真偽値自体には問題はないです。
問題なのは、その後の計算のために法線を取り出すのですが、辺と頂点に
当たったときには接触点から球の中心に向かうベクトルを法線としています。
三角形1枚ならそれで問題ないのですが、2枚以上並べたときの継ぎ目で
球がわずかでも面にめり込んでいるときには、もう1枚の三角形の辺に
斜めから当たったとみなされる場合があります。
三角形の継ぎ目を低速で転がって通過しようとしたときに稀に発生します。
計算の都合で面へのめり込みを許容しているので、このような場合の良い
回避方法が思いつかないです。
言葉足らずで失礼しました。
0138名前は開発中のものです。
02/04/14 20:24ID:???角と円と法線のことをもう一度よく考えてから発言してみてください。
つーかアホか?
0139135
02/04/14 21:06ID:???135のやり方は、球・三角形ともに停止していて、
その後の補正を考えない場合にしか使えません
球が移動しているなら、移動前の球→移動後の球をカバーするような
カプセルで考えないと破綻するはず
0140名前は開発中のものです。
02/04/14 21:16ID:???とりあえずなんでもいいから適当な図でも描いてくれれば
コメントしやすいと思うが。AAでもいいし、画像なら
その辺のあぷろだに うpしてリンク貼るとかさ。
0141名前は開発中のものです。
02/04/14 21:37ID:???線分と円の中心の距離が円の半径よりも小さくなったらそれは接触しているということだろ?
その法線は線分に直角な円の中心点を通る線だろ?
これ二次元ならば中学生の数学。
0142127
02/04/14 21:57ID:???>>139
単純に、めり込んだ量に比例して押しかえすやり方で跳ねかえりを計算してるので
そのような処理になっています。
>>138から判断すると、
球が辺に接触していると判断されたときにどの方向に跳ね返せば良いのか、
を間違っているか、そもそもめり込みを許容していること自体が問題である、
という事でしょうか?
複数のポリゴンに同時に当たった時に、逐次、見つかった順に計算しているのも
問題かもしれないですが。
剛体の計算自体は本を見ればいくらでも資料がありますが、接触判定のアルゴリズムに
なるといい資料が少なく、試行錯誤中です。
0143127
02/04/14 22:09ID:???>線分と円の中心の距離が円の半径よりも小さくなったらそれは接触しているということだろ?
>その法線は線分に直角な円の中心点を通る線だろ?
137の「接触点」という言い方がまずかったのかもしれませんが、
「接触点から球の中心に向かうベクトル」が線分と直行しているので
その点については間違っていないかと。
とりあえず、三角形1枚との当たりに関しては、問題なく動いています。
2枚が隣接していても、実用上問題ないレベルで、大抵の場合は上手く動いています。
ただ、もっと良いやり方があるなら知りたい、と。
0144名前は開発中のものです。
02/04/14 22:12ID:???物理の授業で一番最初にやるはねかえり使ってやった方が簡単だし確実。
0145名前は開発中のものです。
02/04/14 22:15ID:???もっと良いやり方→補正
0146名前は開発中のものです。
02/04/14 23:11ID:???どんな処理するために3角形使ってるかわからないんだけどさ。
3角形を隣接させるってどういうこと?
本当に3角形でいいの?本当は凸角形の当たり判定でいいんでなくて?
0147135
02/04/14 23:31ID:???平行移動・回転する任意形状の剛体が多数ぶつかり合うケースまで考えると、
すごく重いので、いまだに試行錯誤中って事になります(w
辺との判定をoffにしたら、その坂のポリゴンの継ぎ目で、
・すり抜けることがある→「交点が三角形に含まれるか否か」で判定ミス
・問題無い→誤差のせい
と予想
0148135
02/04/14 23:42ID:???0149名前は開発中のものです。
02/04/14 23:47ID:???なんでそれを思いつかないんだろうか?
0150名前は開発中のものです。
02/04/14 23:56ID:YJV4FsYY127は剛体とか言ってるので跳ね返りでやるといろいろ問題多いよ
単純にペナルティ法使ったほうが楽なこともある
0152名前は開発中のものです。
02/04/15 00:08ID:???サイコロを転がすならいいが
棒とか面につきさすような感じでぶつかって来たらどうする?
0153127
02/04/15 00:09ID:???厳密にやろうとすればするほど重くなって実用的でなくなるので、
どこでバランスを取るかを考慮中です。
とりあえずめり込みを前提にするのが間違っている、というのと
凸多角形で判定すればいい、とのアドバイス感謝です。
>>めり込んだ量に比例して押しかえすやり方で跳ねかえりを計算してる
>物理の授業で一番最初にやるはねかえり使ってやった方が簡単だし確実。
最初は物理の本に載っているような跳ねかえりの式を使っていたんですが、
重力などで物体がじわじわめり込んでしまうのを補正するのと、多数の
移動する剛体同士の当たりをとる過程でペナルティ法の方が簡潔に処理
できるようだったので、今はそちらを使っています。
めり込みの大きさと方向だけわかれば後はそれぞれの物体に力を加えるだけで
計算できるので、あまり厳密でなくとも良いゲーム向けには便利ではないかと
判断しました。
跳ねかえり定数を自由に決め難いのが難点ですが。
0154名前は開発中のものです。
02/04/15 00:11ID:???「辺だけ」ではなくて,「辺の当たり判定用にデータを」という意味です
「同じ辺で2度当たってどうのこうの」って問題に見えましたので・・・
0155150
02/04/15 00:15ID:???ペナルティ法って実際どのように実装してますか?
単純に
F = 深さ * k - 相対速度 * e
こうするとバネと同じで発散しやすくないですか?
ちょっと教えて下され
0156153
02/04/15 21:53ID:???素直にその式で実装しています。発散しやすいです。
とりあえずはeを大きめの値にして誤魔化しています。
現実でも跳ね返り係数が大きいものはあまりないので
まぁいいか、と。
そのへんはかなり適当です。ダメだなぁ・・・
こういうのを簡単に上手く処理する方法ってないものですかね?
物体数が多いといろいろ面倒。
0157150
02/04/16 01:19ID:???レスどうもです
最低数回は埋まり状態にないと保存しませんから
ルンゲクッタで精度あげたり・・・(やったことありませんが)
基本は跳ね返りで,埋まりにだけペナルティ法とか
だんだん重くなって行く〜
0158名前は開発中のものです。
02/04/18 06:18ID:???ほら、現実世界では埋まらないでしょ?
だから、埋まる前の衝突瞬間を求めて、世界時間をそこまで
逆戻ししなければならないんじゃないかなぁーなんて思うわけ。
0160153
02/04/18 20:06ID:???必要以上にめり込まない、壁を突き抜けない、運動が発散しない、の3つが
成り立ってそれっぽく動けば、後はどれだけ処理を軽くできるかが勝負かと。
ところでペナルティ法ではない跳ねかえりの式で、多物体の積み重ねってどの
ような処理で行っていますか?
めり込んだ距離や移動量、質量などに応じて押し返したり速度を減衰したりなど試しては
みたのですが、じわじわとめり込んでいくのを上手く回避できませんでした。
なにか良い方法はないものでしょうか?
0161名前は開発中のものです。
02/04/22 15:32ID:qrK3TQcc>ところで連立方程式の解法には何を使いますか?
>消去法,ヤコビ,SOR,ADI,CGなどなど
それぞれの手法について説明お願いできます?
0162名前は開発中のものです。
02/04/22 22:18ID:???もしそうなら、高速で移動しすぎて突き抜けちゃうこともある?
0163135
02/04/22 23:43ID:???めり込みの深さは速度に影響を与えず、フレーム内で100%押し戻してました
前のフレームで衝突寸前な場合に激しく跳ね返るっていう、見た目の不自然さを
解消できそうになかったし、めり込みを後のフレームに持ち越してると
最終的に埋まっちゃったり、すり抜けたりする危険があるので
0164名前は開発中のものです。
02/04/23 00:35ID:???たぶん、127がやってる方法でその問題は発生していないんじゃないかな。
速すぎるとツキぬけるかもしれないけど。
ちなみに、自分は衝突判定ベースの当たり判定を試みたことがあったんだけど、
floatだと精度的にキツいものがあった。原点付近と原点と離れたところでは
有効桁の違いで計算結果に影響が出て、完璧に保証するのは難しいと
感じた。ちなみに、前提条件として、衝突する物体は判定を行う対象と
重なっていないこと、というのがあったからなんだけどね。
(固定小数点で判定するばイケそうな気もした)
ラインなんかに対して限りなく平行に近い状態で衝突しようとした時は、
かなり悲惨だったような。
安定した動作を期待するなら、127が良いと思うよ。
もしくは状況によって使い分けることが必要だろうね。
オマエのコーディングがへぼいんじゃ?という人が居たらご教授ください。
0165名前は開発中のものです。
02/04/23 04:15ID:3ABxQxw2連立方程式ならガウス法で充分でしょ。
32が言うように行列にしてLU分解してピボット処理すればいいし。
0166名前は開発中のものです。
02/04/23 08:44ID:???LU分解とガウス法は全く違う手法ですが。
0167名前は開発中のものです。
02/04/23 09:32ID:???http://dpos1.ice.eng.hokudai.ac.jp/~yasui/JAVA/SOR_APPLET-1.00/Doc.jp/sor_applet/node6.html
ガウス,LU分解
http://goro.denshi.numazu-ct.ac.jp/~ushimaru/pdf/simulation.pdf
CG
http://www.etl.go.jp/~tatebe/research/la/present/cg/sld001.htm
ワケワカラン
0168167
02/04/23 09:43ID:???有限回数の反復で厳密解に達するらしいです
0169名前は開発中のものです。
02/04/23 14:37ID:3ABxQxw2名著「C言語による最新アルゴリズム事典」奥村晴彦著を読みましょう。
係数が0に近づくと、ガウス法では解けないので、LU分解してピボット処理を
行うのです。
0170名前は開発中のものです。
02/04/23 15:07ID:???それが何か?
0171名前は開発中のものです。
02/04/23 15:48ID:???それが何か?
0172名前は開発中のものです。
02/04/23 15:52ID:???___
/ \ ________
/ ∧ ∧ \ /
| ・ ・ | < おめーらレベル低すぎ
| )●( | \________
\ ー ノ
\____/
Gaussの消去法とLU分解は実質的にまったく同等だっつーの
枢軸選択はGaussの消去法でも使えるっつーの
0173とおりすがり
02/04/23 15:59ID:???0174名前は開発中のものです。
02/04/23 16:14ID:???必要な計算量が全然違うだろうが。
0175名前は開発中のものです。
02/04/23 16:24ID:???「全然」というほどは計算量は違わないぞ。
0176とおりすがり
02/04/23 16:43ID:???対称行列なら6倍しか違わないですな。
0177名前は開発中のものです。
02/04/23 18:57ID:qP26dnQc大きな行列をどんどん小さくしていって解くやつ。
0178名前は開発中のものです。
02/04/23 19:54ID:???0179名前は開発中のものです。
02/04/23 23:06ID:???行列式の展開?
0180名前は開発中のものです。
02/04/23 23:12ID:jfgo05Hkそうそう。
機械的かつ簡単なんで、自分はこれでやっちゃってるけど、さすがに重そう。
これよりもちょっと効率が良くて、かつ、さほど難しくないのってどれかなぁ。
0181名前は開発中のものです。
02/04/24 18:36ID:K0E1j0mIネットで検索かけたんですけど、どのようにゲームに適用するのかわかりません。
どこか詳しく解説しているHPとかあったら教えてください。
0182名前は開発中のものです。
02/04/24 22:02ID:xCbWm4T.物体がほかの物体にめり込んだときに
めり込んだ量に比例して反力を発生させてめり込みを防止する
って方法じゃなかったっけ?
撃力の計算とはまた別次元で、あくまでめり込み防止策だと思ってたんだけど
どうなんでしょうかね・・・?
0183名前は開発中のものです。
02/04/24 23:07ID:???0184名前は開発中のものです。
02/04/25 16:25ID:QMcCq9m6物体を固いバネとして、フックの法則で処理してるらしい。
検索エンジンで「kano」「ペナルティ法」で検索してみて。
0185名前は開発中のものです。
02/04/25 18:57ID:OIDKWVBY0186名前は開発中のものです。
02/04/28 08:57ID:???もちろん計算機にやらせる方法なんだけど。
0187名前は開発中のものです。
02/04/28 11:09ID:???計算機がやるのと人がやるのを区別している時点でダメかも
0188186
02/04/28 23:28ID:???私の言葉が悪かったですね。
逆行列を求めるときのクラーメルの公式のように、
一定の処理で答えを得る方法があれば知りたかったのです。
手順を不定数繰り返すような方法ではなくて。
そんな方法はない、ととってよいでしょうか?
0189名前は開発中のものです。
02/04/30 02:51ID:usumw5wg0190
02/05/01 22:02ID:hP64kl/kこのまえなんかテーラー展開すら知らないドキュソが来た。
0191名前は開発中のものです。
02/05/01 22:08ID:???0192名前は開発中のものです。
02/05/01 22:41ID:???0193名前は開発中のものです。
02/05/01 22:42ID:???このまえなんかテーラー展開で威張ってるドキュソが来た。
0194名前は開発中のものです。
02/05/01 22:49ID:???0195名前は開発中のものです。
02/05/01 23:58ID:???0196名前は開発中のものです。
02/05/02 13:12ID:???0197名前は開発中のものです。
02/05/03 11:58ID:IYsMvn.w0198名前は開発中のものです。
02/05/03 12:44ID:???計算の内容さえ理解できれば。> π
0199名前は開発中のものです。
02/05/03 15:11ID:???0200名前は開発中のものです。
02/05/03 16:13ID:???0201名前は開発中のものです。
02/05/03 18:29ID:???でもπ=3だと正六角形の一辺の辺と円の半径が同じならば
どちらも周囲の長さは同じ罠。
あと円周率は3って決めつける厨房教師もでてきそう。
ほら、反比例のグラフを定規で書かすやつみたいに。
0202名前は開発中のものです。
02/05/04 00:29ID:4m79E84c転がり摩擦と滑り摩擦はどう違うの?
0203名前は開発中のものです。
02/05/04 03:26ID:SDeID7JM0204名前は開発中のものです。
02/05/04 09:34ID:gi.FYHWYhttp://natto.2ch.net/test/read.cgi/voice/1018497314/
0205名前は開発中のものです。
02/05/08 00:46ID:wjoxu7eYあと、渦なしの水面が
>>(∂/∂t)^2 z = k Δz (ただし、Δ = (∂/∂x)^2 + (∂/∂y)^2)
になるのはなぜか教えてちょ。
0206名前は開発中のものです。
02/05/08 12:31ID:???0207名前は開発中のものです。
02/05/08 18:18ID:???0208名前は開発中のものです。
02/05/10 08:22ID:???解が波動関数になってそれっぽいから.
渦無しって粘性ゼロという意味だっけ.
量子力学でそんな話があったような無かったような
正直使えないのでは?
毎フレームFEM解くのは量子コンピュータ待ちか
0209名前は開発中のものです。
02/05/11 16:42ID:???----------------------------------------------------------
剛体に同じ力を加えても、重心の加速度は同じで、
角加速度が違ってくるのは、同じ力積なのにエネルギーが
変わるから変な気がするんですが、誰か教えてもらえませんか?
それとも自分の考えが間違っていますか?
-----------------------------------------------------------
ってどうなんでしょう?
0210名前は開発中のものです。
02/05/11 18:50ID:???「力積が同じでエネルギー変化が異なる」という例は、
ほかにもいくらでも考えられるよ。
0211名前は開発中のものです。
02/05/13 23:48ID:WAy/mj8Aそもそもどうやって力積を求めているのか、
そこをちゃんと理解してないのでは?
0212名前は開発中のものです。
02/05/14 02:02ID:???の最後に、その問題について解説してるみたい。
0213名前は開発中のものです。
02/05/14 21:49ID:.e.pT2og0214名前は開発中のものです。
02/05/17 11:28ID:WVs5nPNA点拘束(ボールジョイント)二つ付けると過拘束になって
数値的に不安定になりそうです.
ボールジョイント+スライダジョイントでしょうか.
0215名前は開発中のものです。
02/05/17 18:35ID:GL4pTvyU二つの剛体が完全に一体化されている状態?
0216名前は開発中のものです。
02/05/17 19:04ID:???0217名前は開発中のものです。
02/05/17 19:18ID:???日本人なら蝶番(ちょうつがい)と言え。
0218名前は開発中のものです。
02/05/17 19:31ID:???構造力学で静定,不静定ってのを習いましたがそんな感じです
0219名前は開発中のものです。
02/05/17 21:56ID:???不安定ってことはないと思うよ。ただ、解が一意に決まらなくなるので、
拘束力ベクトルの長さを最小にする、みたいな条件を適当に付加すれば
解を決めることができるようになる。
0220名前は開発中のものです。
02/05/18 14:20ID:r7tHRVkg連立微分方程式?連立代数方程式?
ニュートン力学で解いている方も居ますよね?
0221214
02/05/18 21:35ID:???なるほど勉強になります
>>220のどれで解いているのか解りませんが,
拘束力を加速度(もしくは速度と撃力)の関係を連立方程式で解いて,積分すると拘束される.
という感じです.力だからニュートン力学かな?
{拘束点間の相対速度}={拘束撃力}{質量とか慣性モーメントとかの行列}
これをそのままニ点間(6行6列)で組み立てても,一意に求まらない?
で,なにか条件つけて未知数5個にするわけですかね?
んー数学もっと勉強しておくんだった...
0222220
02/05/18 21:43ID:ur3STz7o219さんは詳しいですね。
やっぱり連立代数方程式を反復法とかで解いたんでしょうか?
0223名前は開発中のものです。
02/05/18 21:55ID:???http://cgi3.tky.3web.ne.jp/~tkano/
0224名前は開発中のものです。
02/05/18 22:22ID:???0225214
02/05/18 22:31ID:???どっかのスレにある触手みたいな感じ.
60FPSとかだと誤差の蓄積でずれて多少の補正は必要で,
内力でコントロールとかは出来ていませんが.
全然理解していませんが,
解析力学+ロボット工学にでてくる方法(ラグランジュ方式?)のがいいのですかね.
ロボット工学の成績は20点くらいだったなぁ・・
0226220
02/05/18 22:48ID:ur3STz7o目で見てわかるほどの誤差が出ますか…。
私の場合、微分方程式+重心に働く力、とかなら誤差も無くうまく行くんですけど
外部から撃力が働くと難しいんですよね。
ロボット工学とかはかなり知識を積み上げないと難しいですね。
未定乗数ってなんなんでしょ?
0227214
02/05/18 23:32ID:???ちょちょっと無学なものでよく解りませんが誤差が無いのはいいことですえ.
一応いろんな人が見ていると思うので簡単に私の方法を書いておきます
今は無き「こってり屋」さんに書いてあったのそのままですが,
2剛体間の一点拘束に限って,撃力を用いて書くと,
拘束撃力Pをうけて拘束点の速度VpはVp’に
Vp’ = Vp + P/mass + ((p×P)[I]^-1)×p
(mass:質量,[I]^-1慣性テンソルの逆,左手系のDirectX型表記です)
拘束条件:2剛体の拘束点間の相対速度はゼロ
Vp1’ - Vp2’= 0
これを組み合わせてPを前に出して緩和法で連立方程式を解いています.
dV/dt=0ですが,外力等を別にかけますのでVp1≠Vp2です.
目に見える誤差は,回転と瞬間速度(ω×pの部分)の関係によるもので,半径方向に離れて行きます.
また位置ずれも考慮して,X1=X2として解くとneko氏のAB法みたいになる?
0228220
02/05/19 00:14ID:rC1StVSgそれから2物体にその力を加えてΔt経過後の剛体の状態を求める、と。
拘束力の向きってどうやって決められるんでしょうかね?
緩和法って非線形計画法とかの一種でしょうか?
無知でごめんなさい。
0229220
02/05/19 09:38ID:vEaFH5.k連立方程式を解けばおのずと拘束力のベクトルが得られるんでしょうね…。
v1' = v2' という拘束条件で解けば大丈夫そうですね。
拘束力が増えたら連立させる式を増やせば対応できるとか…?
0230214
02/05/19 09:49ID:???0231名前は開発中のものです。
02/05/19 10:08ID:???0232名前は開発中のものです。
02/05/19 10:13ID:???技術でもとかならご存じの通りやっている人間も多くいるが。
0233名前は開発中のものです。
02/05/19 10:25ID:???0234名前は開発中のものです。
02/05/19 10:56ID:???こういうのを理解して動かせるものを持ってきてくれる新人さんがいると嬉しいねぇ。
話はそれるけどPSのパネキットって、あれだけの関節数分を全て連立方程式を
立てて解いてるとは思いにくい。
空気抵抗が極端に大きな世界にすれば、もっと擬似的な方法でも上手く動いて
いるように見せられるのかな?
0235名前は開発中のものです。
02/05/19 17:28ID:???を用いて蝶番上手く行きました.
対称行列になるように工夫して
SOR法を共役勾配法に変えたら数回で収束するようになりました.
>>231
一応ゲームでのキャラクタの動きに使えないかなと思っております
■ このスレッドは過去ログ倉庫に格納されています