「雑談」弾の座標の求め方の違い

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

「雑談」弾の座標の求め方の違い

#1

投稿記事 by dic » 15年前

私がここを知って、違うなぁと感じたことは
私が作った弾の座標の求め方では図の右のように求める方法で
管理人さんの弾の座標の求め方は図の左のようです

しかし、ユーザ側からはどちらでもよく
評価の対象になりません

そこで、プログラムの観点から見てみますと
管理人さんのやり方の方が、処理数がすくなく、簡素でわかりやすい
応用が利きやすい(双曲線など応用がやりやすい)
私のやり方は、処理数が大きく、応用がしにくい
と考えたのですが
書籍:ゲーム開発のための数学・物理入門 でも管理人さんと同じやり方で紹介されていました
下の本です
http://www.amazon.co.jp/%E3%82%B2%E3%83 ... 4797329076

しかし、私のやり方だと高校数学ぐらいが必要になり
管理人さんのやり方だと中学生の2次方程式ぐらいで問題が解けます
そういった点も考えると、どちらのやり方で行っていくのがいいのでしょうか?

管理人さんのやり方は応用が効くので取り入れたいですが
慣れてしまっている自分のやり方を変更するのはちょっと・・・という気分です
別に非難などではなく、一長一短かもしれませんが感想をくれるとうれしいです

Tororo

Re:「雑談」弾の座標の求め方の違い

#2

投稿記事 by Tororo » 15年前

自分のはdicさんとほとんど同じでこんな方法をやっています


float ang Angle*PHI*2;


X+=cosf(ang)*Speed;
Y+=sinf(ang)*Speed;




こんな感じですかね。

「弾幕」 という本で紹介されていました。


まぁ使うのはタイミングと状況に合わせるのが、
一番かもしれませんが^^;
画像

へろりくしょん

Re:「雑談」弾の座標の求め方の違い

#3

投稿記事 by へろりくしょん » 15年前

ケースバイケースじゃないでしょうか。

数学はあまり得意では無いので、間違いがあるかもしれませんが。

どのアルゴリズムにも言えることですが、使うべき場所とそうでない場所があります。

単に線分を求めたいのであれば、より計算量が少ない管理人さんの方の書き方がいいように思いますが。
しかし、一次関数で円は描けませんよね。

円周を求めたいのであれば、dicさんの方を使うべきではないでしょうか。

コード量や可読性、実行速度をトレードオフで最適な方法を選択していけばいいと思いますよ。


>管理人さんのやり方は応用が効くので取り入れたいですが
>慣れてしまっている自分のやり方を変更するのはちょっと・・・という気分です

気持ちはなんとなくわかりますが、より優れた方法があれば、古い手法に固執せず、取り入れていくべきかと。
いくらWindowsが小難しくても、いつまでもDOSを使ってはいられないでしょう。

たいちう

Re:「雑談」弾の座標の求め方の違い

#4

投稿記事 by たいちう » 15年前

> 管理人さんの弾の座標の求め方は図の左のようです

言いたいことが伝わってきません。
例えば、サイトには次のような計算がありますが、
これは図の右の方法ではないのですか?

http://dixq.net/rp/13.html
> shot[n].bullet.x+=cos(shot[n].bullet.angle)*shot[n].bullet.spd;
> shot[n].bullet.y+=sin(shot[n].bullet.angle)*shot[n].bullet.spd;

dicさんの思う「図の左」の方法と「図の右」の方法を使い、
同じ動きをするシンプルなプログラムを添付してもらえれば、
質問が分かりやすくなると思うのですが。

Dixq (管理人)

Re:「雑談」弾の座標の求め方の違い

#5

投稿記事 by Dixq (管理人) » 15年前

y=ax+b
というやり方がどのようなやり方かよくわかりませんが、
VxとVyで座標を計算している部分の事ですかね?

両方使ってますよ。
私は弾幕は4種類の方法で軌跡を計算しています。
例えば動く物体は以下のような構造体を持っています。

typedef struct{
float ox,oy;//計算を始めた座標
float x,y; //現在の座標

float Vx,Vy;//速さ
float Ax,Ay;//加速度
float t; //時間

float Angle;//角度
float Speed;//速さ

座標のセット
・・・(略
}MvObj_t;

●方法1

物理の公式で

V = V0 + at;
x = V0t + 0.5at^2;
v^2 - v0^2 = 2ax;

という3つの運動方程式ありますよね。
これに従って座標を求める方法です。

●方法2

単純にVx,Vyのみを座標計算に使う方法です。

x += Vx;
y += Vy;

のように使います。
Vは時間によって任意に変化させたりするとぐにゃぐにゃしてくれます。

●方法3

単純に角度と速さをセットして座標を計算する方法です。
たいちうさんが書いて下さっている方法です。

●方法4

ベジェ曲線を使って進む方法です。
http://musashi.or.tv/fontguide_doc3.htm
STGでは到達したいポイントに、地点Xに作用されながらスムーズに進む・・みたいな処理が必要な場面が結構あるので重宝します。


私が思うにどの計算方法を採用しなければならないと言うことは無く、その時その時で、
効率的に計算できる計算方法を採用すればいいのだと思います。
だから結局は全部使うと。

dic

Re:「雑談」弾の座標の求め方の違い

#6

投稿記事 by dic » 15年前

なるほど結局は全部使うんですね
たまたま私がみたところの弾の動きの処理が最初の画像の左だったんですね
たしかに他のショットは違う処理してますね
関数で、パラメータ化すればいいのにと思っていたのです
となると弾の動きの処理は関数のポインタを保持したほうがいいのかな

ケースバイケースで使いわけるのが最適なのですね

なんとなくモヤモヤしたものがなくなり落ち着きました
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る