SIN COS ATAN三角関数テーブル化について

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

SIN COS ATAN三角関数テーブル化について

#1

投稿記事 by サイホーン » 15年前

こんばんは、VC++2008EE、DXライブラリで龍神録の弾幕を高速化したいと思っています。


三角関数のテーブル化で高速になるということを知りましたが、
過去ログやグーグルで調べても
角度を度数法で代入して使うやりかただけしかなくて困っております。
以下は過去ログで見つけたテーブル化のソースです。

float sincos[360];

void initSincos() {
int i;
for(i = 0;i < 360;++i)
sincos = sin(i * PI / 180);
}
#define SIN(KAKUDO) (sincos[KAKUDO % 360])
#define COS(KAKUDO) (sincos[(KAKUDO + 90) % 360])

龍神録ではsin(PI/180*20)とかcos(PI/20)
のように弾幕の角度をPI/180*20やPI/20というようにラジアンで使用しているので
上のテーブル化したSIN()とCOS()では引数が整数の度数法なので当てはまらないのです。

上記のテーブル化したSIN()とCOS()を用いて
SIN(PI/180*20)やCOS(PI/20)というように使用するには
どうすればいいでしょうか?


boss_shot.angle=40;
boss_shot.X=COS(boss_shot.angle)*speed;
boss_shot.X=SIN(boss_shot.angle)*speed;
という感じでやはり度数法でやるべきでしょうか? 画像

Dixq (管理人)

Re:SIN COS ATAN2等の三角関数テーブル化について

#2

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

> サイホーンさん

こんにちは。
普通にラジアンを度数に変換したいんですよね?
PIは180度の事ですよね。
PIが180度ならxは何度か?ということは

PI:180=x:何 ですから

PI*何 = 180x より

何 = 180x ÷ PI

ということになります。求めたい角度は90度つまりPI/2だとしましょう。
xにPI/2を入れてみると「何」が90度になればいいんですよね?

何 = 180 * (PI/2) ÷ PI

何 = 180 / 2

つまり

何 = 90

となりました。
というより、度数法で計算したいなら、全ての計算式を度数に直した方が早いですよ。
この場合ラジアンを使う意味は無いのですから。

例えば90度に飛ばしたい時は

~~.angle = 90

とかで

~~.x += Cos[~~.angle];

とかやった方が早そうです(要素指定は書かれている通り%上限とマイナス対策が必要でしょう)

しかし1度刻みというのは少々大雑把すぎませんか?
東方のように当たり判定が小さいものは遠くから自機狙いで飛ばすとおそらく当たらないと思いますよ。
1度は分度器で見たら細かいかもしれませんが、STGの計算上は大きな誤差になると思います。
せめて3600位は用意してあげた方がいいのではないでしょうか。
その辺の理想的な数値は試行錯誤で見つけるのがよさそうですが。

softya

Re:SIN COS ATAN2等の三角関数テーブル化について

#3

投稿記事 by softya » 15年前

>こんばんは、VC++2008EE、 DXライブラリで龍神録の弾幕を高速化したいと思っています。
>三角関数のテーブル化で高速になるということを知りましたが、

本当に三角関数をテーブル化するだけで高速化出来ますか?
三角関数がネックだと言うことは時間計測して確認されましたか?
間違った方向に努力しても、無駄になりますよ。

サイホーン

Re:SIN COS ATAN2等の三角関数テーブル化について

#4

投稿記事 by サイホーン » 15年前

みなさんありがとうございます。
管理人さん、softyaさん、せっかくレスして頂いたのに申し訳ありません。

三角関数のテーブル化を行う前に
ボトルネックを調べてみますと、
当たり判定関係でおもくなっていることがわかりました。
また、スレッドをすみませんが、
立てさせて頂きます。


管理人さんのおっしゃるテーブル化する時はラジアン代入じゃなくて
度数で扱うということは勉強になりました。
テーブル化する時是非参考にさせていただきます。
本当にありがとうございました。
画像

閉鎖

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