戯言徒然日記開発日記東方DTMC/C++DoJaLuaCG備忘録
気が向いたら創作活動とかしてる人のチラシの裏。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009.08.09 Sun

 お久しぶり。にふです。


 4月から忙しい毎日ですが、6月は特に忙しかったです。全休できたの2日?業種によってはもっと忙しい方もいらっしゃると思いますが、あまり無理なさらないで下さい。

 7月は後半がまた大変でした(最近ピークですけど。。。)が、ちょっとずつ自由時間を集めて諸活動をば。基本的に仕事とかそういうの優先なので趣味の時間はほぼないです。

 

 さてさて、今日またふとエントリーを書いたかと言うと、なんか他所で名前があがっていたので。。。

 いつものことですが普通に読むとなんてヒドイやつなんでしょうね。にふって。

 

 いやいやいや!つんさん!9割くらい合ってますけどWeb上ではオブラートしてもっとこう、私の上から目線表現を隠して下さい!

 

 

 で、本題はそこではなくて、記事にある「徒然なるままに」さん。auユーザの私なので密かに期待してます。

 高速化についてお悩みなのでしょうか?オープンアプリは10時間未満の経験ですが、atan2とかないくらいの知識はあります。あまり自信はないですが少し書いてみたいと思います。

 

 高速化といってもハードウェアの処理速度を速くするわけではないので、正確には「最適化」ですね。

 

 以下、ver0.0.2のDLして見せていただいて思ったことなど。

 

(1) 三角関数の最適化

 GameMathクラスにatan2を自作しているのが気になりました。sin,cos,tan,atan2はテーブルに展開してその値を参照することで速度が相当違います。有名なので検索するだけでいろいろ出てくると思います。すでに対応してるかな?

 オープンアプリでもsinはあったはずなのでsin,cosはテーブルの動的生成も可能ですね。ソースにテーブルをベタ書きするとclassファイルが膨れるので実行時メモリ消費を犠牲にして動的生成するのもいいと思います。東方らしきものは動的生成でしたね>つんさん

 atan2のテーブル参照はやや特殊かもしれません。yaneSDKやSeleneのソースが参考になるはずなのでそちらをどうぞ。

 

(2) 平方根の最適化

 なぜそうなるのかを説明できませんが、逆平方根は以下のように求めることができます。

/**
* 逆平方根を算出する.
* @param f float
* @return float
*/
public static float rsqrt(float f) {
    float half = 0.5f * f;
    f = Float.intBitsToFloat(0x5f3759df - (Float.floatToIntBits(f) >> 1));
    return f * (1.5f - half * f * f);
}

従って、平方根は下記のようなコードになります。

/**
* 平方根を算出する.
* @param f float
* @return float
*/
public static float sqrt(float f) {
    return f * rsqrt(f);
}

平方根は距離計算に多用するので若干軽くなるかも。

 

たった2つでしんどくなってきた。。。きっと続きはこれ見たつんさんが書いてるはず(笑)

 

・データ構造、アクセスの最適化(走査、追加、削除)

・文字列描画は使わない

とか?

 

横槍でしたが私も応援しているので頑張って下さいー。


管理者にだけ表示を許可する

Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。