OpenGLエアホッケーの移動について

このQ&Aのポイント
  • エアホッケーの移動について悩んでいる方へ
  • エアホッケーの移動に関する計算方法について
  • エアホッケーの移動における速度と位置の求め方
回答を見る
  • ベストアンサー

OpenGL エアホッケーの移動について

現在こちらのホームページで勉強中なのですが http://www.wakayama-u.ac.jp/~tokoi/opengl/ex-f.html こちらのエアホッケーの移動で悩んでいます。 パックの質量を m とし,それが速度 v に比例した摩擦力 -µv を受けて運動するとき,初期位置を p0,初速度を v0 とすれば,時刻 t における速度 v と位置 p は次式で求めることができます. v = v0 e-(µ/m) t とあるのですが v0以降になにをやっているのか悩んでいます eは上の文章中に書かれていませんし・・・ -(µ/m) tはu/mにtをかけて、結果を負のべき乗を行うのだと思うのですが。 もしよろしければどのような計算を行えばいいのか教えていただけないでしょうか よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.2

そこがわからないのであればちょっと難しいかもしれないですが... まずニュートンの法則に従うと、物体にかかる力(F)と加速度(a)、質量(m)の関係は F = ma となります。 今回、物体にかかる力は速度に比例する、ということなので F = μv すなわち μv = ma => a = μv / m という具合に空気抵抗によって発生する加速度を得ることが出来ます。 加速度とは速度を時間で微分したものなので、 a = dv / dt => dv / dt = μv / m あとは、この微分方程式を解いていきます。 => (1/v)dv = (μ/m)dt => log(v) = (μ/m)t + c {c:積分定数} => v = e^{ (μ/m)t + c } => v = {e^(μ/m)t}・{e^c} この式で時間0の場合を考えると v0 = {e^0}・{e^c} = {e^c} となる。したがって、時間tにおける速度vは v = v0・e^(μ/m)t となる。 定数の符号が逆になっているのが気になるのであれば、 μ = -k として v = v0・e^-(k/m)t で提示された式と一致する。 という感じです。 ただ、この問題の場合は式の内容は導出方法がわからなくても提示された式をそのまま使ってプログラムを書けばとける問題なので、難しいことは考えずにとりあえずコードを書いてみるほうが良いのではないかと思います。

konngo50
質問者

お礼

なるほど、負の冪乗の部分は勘違いで普通に冪乗を行えばいいのですね eの部分は2.71828182845904523536として行うと、プログラム上は問題なさそうです。 式の内容やとき方はネットでひとつづつ調べて理解していこうと思います。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

exp も使ってやってほしい.

konngo50
質問者

お礼

expもあったんですね。 数学の知識なしでゲーム作っていたので まずいと思って最近勉強していたので 気づきませんでした。

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.1

摩擦力と書かれていますが、この式だと空気抵抗っぽいです。 空気抵抗は速度に比例するので F = μv となる。 F = ma = μv => a = μv / m => dv / dt = μv / m ... と後は微分方程式を解いていけばその式になります。 ちなみに、eは自然対数の底です。

konngo50
質問者

お礼

丁寧にありがとうございます。 ですがどうも私の方で数学の知識がぜんぜん足りていないみたいで Fがどこからでてきたとかmaがどこから出てきたのかわからないレベルで・・・ わざわざ書いていただいたのに申し訳ないです。 もしよろしければもう少し詳しく書いていただけると助かります (これ以上簡単にはできなかったらすみません。) よろしくお願いします。

関連するQ&A

  • OpenGLでのプログラミングについて質問です

    http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#7.2 上記URLのソースについて幾つか質問です。 1.以下の用に記述すると、何故以前のラバーバンドを消去することになるのでしょうか? if (rubberband) { /* 以前のラバーバンドを消す */ glVertex2iv(point[pointnum - 1]); glVertex2iv(savepoint); } 2.以下の部分の、staticはどういう役割をしているのでしょうか? void motion(int x, int y) { static GLint savepoint[2]; /* 以前のラバーバンドの端点 */ 3.メインは、以下のように記述されているのですが、OpenGLは通常のCプログラミングと違い、上から下に順次処理されて行っているだけでなく、見えない部分でも何か処理をやっているようなのですが、どういう順序でこのmainは処理されているのでしょうか? int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(320, 240); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); glutMouseFunc(mouse); glutMotionFunc(motion); init(); glutMainLoop(); return 0; } あと、 http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#6.1 に書かれている、 glOrtho(-w / 200.0, w / 200.0, -h / 200.0, h / 200.0, -1.0, 1.0); という関数の意味がよく分かりません。 どなたか、どれか一つだけでも良いので解答をお願いします。

  • opengl

    C++,openGLの質問です. 画像の上で2点を指定し,その2点を用いて画像上に四角形を表示したいのですがどういったpログラムを書けばいいでしょうか?イメージは図のような感じです.(1)と(2)が画像上で指定した点で高さが255の長方形になるようにしたいです. http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#5 のサイトを参考に作ってみたのですが,いまいちわかりません. 以下,自分で作ってみたところです. わかりにくいと思いますが,アドバイスいただけたら嬉しいです. painted_pointはint型のベクターでクリックされた点の位置を保存しています. 最終的には,3点以上の折れ線上に長方形がつながってくっつくのことを予定しています. for(int i = 0; i<painted_point.size(); i++){ GLdouble vertex[][3] = { { painted_point.at(i).x, painted_point.at(i)., 0 }, { painted_point.at(i).x, painted_point.at(i)., 255 } } }; int edge[][2] = { {1 , 2} for(int i=0; i<painted_point.size(); i++){ edge[][2] ={{ i*2 , i*2 + 2}, { i*2+1 , i*2 + 3}, } {painted_point.size()-1,painted_point.size()} }; /* 図形の描画 */ glColor3d(0.0, 0.0, 0.0); glBegin(GL_LINES); for (i = 0; i < 12; ++i) { glVertex3dv(vertex[edge[i][0]]); glVertex3dv(vertex[edge[i][1]]); } glEnd(); }

  • 物理学 水平投射

    高さhから初速度v0で水平投射する問題です。 (空気抵抗の比例定数k、重力加速度g、投げ出したときの時刻を0とする。) 時刻t[s]における物体の速度 v(x) = v0*e^-(k/m)t v(y) = (mg/k){1 - e^-(k/m)t} までは解けたのですが、そこから時刻t[s]における物体の位置の求め方がよくわからないので、ご教授お願いします。 速度をtで積分すれば位置になるのはわかりますし、積分も ∫v(x)dt = x = (-m/k)V0*e^-(k/m)t というのはできますが、そこから初期条件を課して x = (mv0/k){1 - e^-(k/m)t} へ変形する考え方がわかりません。

  • 運動の問題です。

    質量mの質点がX軸上を速度の2乗に比例する摩擦力-γ(dx/dt)^2を受けて運動している時、次の問題に答えなさいという問で (1)質点のX軸方向の運動方程式をv(=dx/dt)を用いて表しなさい。ただしv>0とする。 (2)t=0の時の質点の速度をdx/dt=v0>0として、時刻tにおける速度vを求めなさい。 (3)t=0の時の質点の位置をX=0として、時刻tにおける位置xを求めなさい。 っていう問題なんですけど。自分で(2)までは解いて(2)の答えはv=v0^2e^-2ktvになったんですが本当に自信がありません。又(3)は部分積分法を用いるのでしょうか?

  • 1次元の運動で…

    1次元の運動で、物体の速度vが時間tの関数として ν = a exp(-bt) で与えられるとき、物体に働く力は速度vに比例することを示せ。 (a、bは定数) このような力の例に、速度の向きとは反対方向に速度に比例して働く摩擦力がある。 exp(-bt)はeの(-bt)乗(だと思います…) どうやって示せばいいのか考えれば考えるほどこんがらがってきます…。 微分で解くのかな…と思いとりあえずνをtで微分してみたのですが「???」…。 ヒントでいいので何かあれば教えて下さい。 お願いします!

  • ベルヌーイの定理(排出速度と液面高さ)

    液面制御の問題を考えているのですが、排出速度は高さhに比例する{v(t)=kh(t)}らしいのですが、どうしても√hに比例するとしか考えられないのですが・・・どう考えればよいのでしょうか? 流入速度u(t) 流出速度v(t) 断面積A 高さh(t) とします。

  • 物理の微分方程式

    物理の微分方程式 高二です。塾で微分方程式を習ったのですが、さっぱりです。。。。 問 質点が速度Vに比例する抵抗力を受けて運動する際、V(t)、X(t)を求めよ。ただし、比例定数をk(>0)とする。 解 ma = mg-kv --1 a = dv/dt --2 v = dx/dt --3 1,2より dv/dt = g-kv/m よって dv/dt = -k/m(v-mg/k) ---4 ←変数分離型     (1/v-mg/k)dv = -k/m dt ----5 ここから積分して、計算して log{v(t)-mg/k} = C-kt/m ----6 (C=log{v(0)-mg/k}) {}は絶対値 そして {v(t)-mg/k} = e^C -e^-kt/m -----7 その後 v(t)=mg/k(1-e^-kt/m)(t≧0) となりました 質問 (1)初期条件ってなんですか?   (2)4→5の過程はなぜやるんですか?変数分離型ってなんですか?   (3)6→7の過程でなぜlogがとれるんですか?   (4)よければx(t)の答えを教えて下さい とても困っています!部分的でもよいので教えて下さい、お願いします

  • 反応速度と温度

    アーレニウスの式を考慮すると、反応速度vはΔEを活性化エネルギー、Tを温度、cを定数として v=c√T・e^(-ΔE/RT) で表わされます。T=50℃のときの反応速度の2倍の反応速度で反応させたいとき、 温度は何度にすればよいか? これを解きたいんですけど、方程式立てるとxがeのべき乗の方にも出てきてしまって上手く解けません。 なんかいい解法はありますか?

  • 電場と電位の関係式について

    図のように点P(位置ベクトルr)と点Q(位置ベクトルr+Δs)の電位差ΔV=V_Q-V_P(<0)は,単位正電荷が点Qから点Pまで-Δsだけ変異するときに電場Eがする仕事-E(↑)・Δs(↑)=-E_tΔsに等しい.(-E_tはΔs(↑)方向の成分)と表されるので,電場Eの変位Δs の方向成分E_tはE_t=-ΔV/Δsである. ここからE(↑)=-gradVが導かれるのはわかりますが,この話の進め方に疑問があります. まず,本にも書いてあるようにΔVは負ですよね. そして単位正電荷を点Qから点Pまで持っていくからベクトルΔsの逆方向に進むわけですから-Δsになり,このときする仕事はE(↑)・(-Δs(↑))になるというのはわかりますが,なぜわざわざΔVを負にとるのでしょうか. E_t=-ΔV/Δs(>0)ですよね. つまり,点Pの電位をV+ΔV,点Qの電位をVというように,この本とは違う電位のとり方をしてみます. ΔV=V_P-V_Q(>0)となります.このとき点Pから点Qへと単位正電荷を変位させたとき,仕事はE(↑)・Δs(↑)=E_tΔsとなり,E_t=ΔV/Δs(>0)となりますよね・・・. ではE(↑)=gradVとなるのではないでしょうか. 一種の公式であるE(↑)=-gradVにマイナスがつく理由がよくわかりません. これらのことについて詳しく教えていただけないでしょうか. よろしくお願いします.

  • 撃力を受けた剛体の運動

    慣性モーメントI質量Mの剛体に,重心からdの位置に撃力が加えられた時の運動について教えて欲しいです. 剛体に与えられた運動量をPとすると,並進運動と回転運動を別に考えて 並進運動の速度V=P/M 回転運動の角速度ω=Pd/I 剛体に与えられる運動エネルギーE=1/2*MV^2+1/2*Iω^2=1/2*P^2*(1/M+d^2/I) となるようです. dによってEが変わってしまっていますがなぜ問題ないのでしょうか?理由を教えて頂けると嬉しいです. 撃力として質量m速度vの小玉が完全弾性衝突した後停止する場合を考えるとP=mv(E=1/2*mv^2)となるので,力の位置に依らずEは一定になるのではないかと思っていました.