HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0205
KAO等速曲線移動4解決


KAO

リンク

2010/2/5(Fri) 22:48:43|NO.30428

シューティングゲームを作っています。
敵を2次、3次曲線上やsin曲線上を移動させているのですが、曲線上の場所によって敵の移動速度が変わってしまいます。
曲線上のどの場所でも同じ速度で動かし続けるうまい方法を知っている方がいたら、教えてもらえると助かります。(><)



この記事に返信する


GENKI

リンク

2010/2/6(Sat) 00:04:54|NO.30432

曲線の長さが求められれば何とかなりそうな気がするので調べてみました。
http://w3e.kanazawa-it.ac.jp/math/category/sekibun/henkan.cgi?target=/math/category/sekibun/kyokusen-no-nagasa.html
これでなんとかなる…のかな?



ANTARES

リンク

2010/2/6(Sat) 02:40:03|NO.30438

 曲がるためにはスピードを落とす必要があるので、
等速だと寧ろ不自然な気もしますが……。
円運動なら等速でしょうけど、これは極座標を使えば簡単にできそう。



KAO

リンク

2010/2/6(Sat) 16:27:10|NO.30452

GENKIさん。回答ありがとうございます。
曲線を10個ほどに分割して、それぞれの長さを積分で計算し、長さに反比例するように速度を設定してみたところ、おおよそ等速に見えるようになりました。
工夫すれば完璧な等速も何とかなりそうです。がんばってみます。



玄冬

リンク

2010/2/6(Sat) 16:56:33|NO.30453

また、回答が解決に間に合わなかった…orz

一般的な話でいいのであれば…

移動する曲線を仮にf(x)とおきます。
f(x)上の動点P[p,f(p)]が定点A[a,f(a)]から毎秒vの速度でxの正方向に移動する時、
t秒後のPの位置を求めよ。

というのが、たぶん今回の質問だと思います。
GENKIさまの仰るようにAPの長さは(1+f(x)')^0.5のa→pの定積分で求められます。
そこでg(x)=(1+f(x)')^0.5と置き、g(x)の不定積分をG(x)と置きます。
するとAPの長さはG(p)-G(a)で示されます。
ところでPは、Aから一定の速度vで移動しているのだから、t秒後にはv*tの距離分移動している筈。
なのでG(p)-G(a)=v*tという等式が成り立ちます。
これをG(p)=v*t+G(a)と変形し、両辺をG(x)の逆関数G^-1(x)に入れると
p=G^-1(v*t+G(a))という式が得られます。

これは点Aを出発してからt秒後の点Pのx座標を返すtの関数ですので、この関数を、 KAOさんが用いてる具体的な関数について求めれば
等速曲線移動ができると思います。



ONION software Copyright 1997-2023(c) All rights reserved.