トピック
ハヤブサ.MX t.kmpayrm

プチコンで物理エンジンを作るための勉強

最近、プチコン3号で物理エンジンのアニメーションを作ってみたいと思いましらべてみましたがわかりませんでした。 物理に詳しい方は分かりやすく 物理エンジンでひつような物理を教えてくれますか? 説明下手でごめんなさい。
5そうだね
プレイ済み
返信[1]
親投稿
れい rei-nntnd
物理っていっても 惑星の動き 物体の衝突 光のふるまい 波の伝搬 流体 相転移 気象の予報 時空間のゆがみ 波動関数 粉体 とかいろいろあって、全部教えるのは無理だよ どんな物理をやりたいのさ?
2そうだね
プレイ済み
返信[2]
親投稿
KU kerorinU
ちょっと興味あるので米残 物体の衝突は昔やろうとして面倒くさくなって挫折した経験が、、、
1そうだね
プレイ済み
返信[3]
親投稿
ハヤブサ.MX t.kmpayrm
やってみたいのは重力の物理です
0そうだね
プレイ済み
返信[4]
親投稿
れい rei-nntnd
重力ってのもいろいろあってな。 中学生で習う位置エネルギーでいいのか (物はしたに落ちるよーっての 高校生でならう「距離の二条に反比例」がいるのか (惑星の動きを計算! それとも重力で空間曲げちゃう相対性理論の計算したいのか さらに発展して量子重力理論やってみたいのか、 さぁえらべ! あ、最後のは無理っす
2そうだね
プレイ済み
返信[5]
親投稿
ハヤブサ.MX t.kmpayrm
えーと 中学生で習う位置エネルギーです!
0そうだね
プレイ済み
返信[6]
親投稿
れい rei-nntnd
よし。じゃあハヤブサ氏の世界は位置エネルギーが存在する。 すべての質量を持つ物体は下に引かれる。 じゃあつぎ。 物体は柔らかいのか硬いのか。 物体どうしはぶつかるのか否か。
1そうだね
プレイ済み
返信[7]
親投稿
ハヤブサ.MX t.kmpayrm
どうこたえればいいのやら...柔らかい物体?
0そうだね
プレイ済み
返信[8]
親投稿
れい rei-nntnd
わからないなら硬い物体にしよう。らくだから。 次は次元だな。 物体の動く世界は2Dなのか3Dなのか。 マリオは4まで2D。64で3D。
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
時空間のゆがみが気になった……… 教えて!って言ったらプチコンで再現できるのかな………(´ω`)
2そうだね
プレイ済み
返信[10]
親投稿
れい rei-nntnd
計算はそんなむずかしくない。 平方根と行列、あと自己むどうちゃく使うだけ。 何をどう計算して何を見せるかの問題。 重力レンズとかケプラーの法則の相対論補正とかそんなんがよくあるかな。
0そうだね
プレイ済み
返信[11]
親投稿
ハヤブサ.MX t.kmpayrm
次元は2Dです
0そうだね
プレイ済み
返信[12]
親投稿
れい rei-nntnd
よし。なら条件はそろった 剛体・2次元・重力ありの「ニュートン物理」のシミュレーションな。 最初は難しいからこれに 「物体円一つで回転しない」との条件を付ける。 そうすると、物体を一つ表すのに必要な変数は 位置X,Y 速度VX,VY 直径 r 重さ m この6つ。 世界を表すのに必要な変数は 重力の強さを表す「重力加速度」 g これ一つ。 これでハヤブサ氏の世界が完成する。
1そうだね
プレイ済み
返信[13]
親投稿
れい rei-nntnd
物理シミュレーションにもいろいろあるけどね。見た目に楽しいのは少しずつ時間を進めるやつ。それはこうする ハヤブサ氏は神様だから「世界の始まり」を記述する。 T=0:g=9.8 X=200:Y=10:VX=0:VY=0:R=5:M=1 SPSET 1,1 そして世界の法則=ニュートン力学に従って、時間を少しだけ進める。 DT=1/60 T=T+DT:X=X+VX*DT:Y=Y+VY*DT:VX=VX:VY=VY+g*DT SPOFS 1,X,Y これを繰り返す WHILE TRUE ... WEND
3そうだね
プレイ済み
返信[14]
親投稿
れい rei-nntnd
こんなかんじ。 とりあえずミカン。 つぎは床作って、反射かんがえる。 が今日は初めて投稿30個いきそうなのでおしまい。
1そうだね
プレイ済み
返信[15]
親投稿
Hanzo rzsense
ハヤブサ.MXさんのご要望のレベルには到底達していないかも知れませんが、添付のようにして、重力に引かれて弾み続ける球を表現できます。 重力に引かれて自由落下する→床に当たって、衝突前と同じ速度ではね返る→元と同じ高さまで戻って来る→以下繰り返し なお、添付では、1ピクセル=1cm、重力の強さを表す重力加速度は、9.8m毎秒毎秒(980cm毎秒毎秒)としています。
0そうだね
プレイ済み
返信[16]
親投稿
Hanzo rzsense
先の私の提示プログラムは、れいさんの事前のご説明とかぶっていますね。恐縮です。 ちなみに、重力加速度を1/6にする(れいさんご提示のプログラムでは、9.8を1.62に、私のプログラムでは、980を162にする)と、月面上での運動をシミュレートできます。
1そうだね
プレイ済み
返信[17]
親投稿
MIKI ifconfig
そういえば私の先日の王様vs女王様は 重力と空気抵抗をモデル化してました。 (y方向運動方程式) Fy=m*ay=m*g-k*vy (Fy=力, m=質量 ay=y方向加速度 g=重力加速度 k=空気抵抗 v=速度) 変形して ay=(mg-kvy)/m となるので、 vy=vy+(mg-kvy)/m*dt (dt=1/60s) y=y+vy*dt (x方向運動方程式) Fx=m*ax=-k*vx (Fx=力, m=質量 ax=x方向加速度) vx=vx+(-k*vx)/m という感じでシミュレーションしてます。
2そうだね
プレイ済み
返信[18]
親投稿
おかっぺ Japanese_WASABI
僕、必ずご飯を全部食べる主義の人ですが、こんなにコメ残したくなるなんて。 自分が気になるものにマークする仕組みは出来ているんだから、後は自分がやる気になったときにマークしたものを上手くピックアップしてくれるシステムが世の中にあるといいのにな。 気になる情報なのに、仕事中とかに見るとノーティフィケーションが消えて、時間のあるときに見られない。物理苦手な僕にはこの講座は気になります。 ハヤブサ.MXさんのおかげで勉強になります。ありがとうございます。
5そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
れいさん、Hanzoさんのレスに補足をしておくと9.8や1.62という値は単位がm/s^2なので「画面上の1ドットを1mとしたとき」の値です。 1ドットをどれくらいの大きさに設定するかは制作者が自由に決めて良いためこの数字は実際のゲーム等で使用する場合はそれに合わせた値に変更する必要があります。
1そうだね
プレイ済み