[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3919] BOARD: Re: ありがとうございました(Turn0Ver0.2 完成♪)



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい
http://www.imasy.org/~mone/osask/index.cgi?REFER=3d1eb975_7f25

2002/06/30 16:55
川合秀実

[OSASK 3895]へのレスです。

(typedef)
>こんな方法があったのですね。
>こちらの方が、だいぶ分かりやすいと思います。
>introaに初心者用と言う事で、入れてみてはいかがでしょうか?
>親しみやすくなると思います。

  いえいえそれはしません。はっきり言って単に"struct"や"*"がソースから一
掃されただけです。それ以外に何も変わっていません。introaはOSASKのプログ
ラミングにおける初心者を想定していますが、C言語そのものの初心者は想定し
ていません。OSASKのプログラミングを通じてC言語入門をやるなら、それはまた
別のパッケージでやるべきです。introaのテーマではありませんし、今の僕がや
るべきことでもないと僕は思います。興味のある方にやっていただきたいです。

>「FPUの無いPCでも動く三角関数用ヘッダ」もアップロードしておきました。

  ええと、これについてですが、tksin()は以下のように書いた方が速くてコン
パクトだと思います。switch - caseを使わずに配列を使いましょう。

int tksin(int ang)
{
    static int data[91] = {
        0, 175, 349, 523, 698, 
        ...(中略)..., 10000
    };
    int porm = 1;

    if (ang < 0)
        ang = - ang; /* 全部プラス側に持ってくる */
    ang %= 360; /* 0-359にする */
    if (ang > 180) { /* 0-179にする */
        porm = -1;
        ang -= 180;
    }
    if (ang > 90) /* 0-90にする */
        ang = - ang + 180;

    return porm * data[ang];
}

もし5度ずつにするなら、

int tksin(int ang)
{
    static int data[19] = {
        0, 872, 1736, 2588, 3420, 4226, 5000, 5736, 6428, 7071,
        7660, 8192, 8660, 9063, 9397, 9659, 9848, 9962, 10000
    };
    int porm = 1;

    if (ang < 0)
        ang = - ang; /* 全部プラス側に持ってくる */
    ang %= 360; /* 0-359にする */
    if (ang >= 180) { /* 0-179にする */
        porm = -1;
        ang -= 180;
    }
    if (ang > 90) /* 0-90にする */
        ang = - ang + 180;

    return porm * data[ang / 5];
}

です。もちろんtkcos()やtktan()はそのまま使えます。

  "Turn ZERO"ですが僕は976点までしかいけません。なかなか難しいです。まあ
僕はゲームが下手なのでうまい人がすぐにすごい点数を出してくれると思います
が(笑)。