[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

HSPコンテスト:ショートプログラム:数学・物理編:sin/cos


モジュール

物体の回転や斜め移動には欠かせない三角比(sin/cos)を作成するモジュールです。

右端切れていますが、範囲選択してコピーすれば大丈夫だと思います。

dim sintable, 65
sintable = 0,6,13,19,25,31,38,44,50,56,62,68,74,80,86,92,98,104,109,115,121,126,132,137,142,147,152,157,162,167,172,177,181,185,190,194,198,202,206,209,213,216,220,223,226,229,231,234,237,239,241,243,245,247,248,250,251,252,253,254,255,255,256,256,256
#module 
#deffunc sincos int
        mref i
        dup result, sin@
        repeat 2
                rad = i&0xFF
                sign = 1
                if rad>=128: sign = -1: rad - 128
                if rad>=64: rad = 128-rad
                result = sintable@.rad*sign
                dup result, cos@: i+ 64
        loop
return
#global


;●使い方
        sincos 128; 256で一周。
        mes "sin = "+sin+"/256"; 出力は256倍
        mes "cos = "+cos+"/256"; 出力は256倍

もっといいのがあったら書いてってください。


  • 2004/07/06 配列代入部分をプログラムで。70バイトも節約できました。
            dim sinTable, 65
            cosS = 1<<24
            repeat 65
                    sinTable.cnt = sinS>>16
                    sinS + cosS*4/163
                    cosS - sinS*4/163
            loop
    #module 
    #deffunc sincos int
            mref i
            dup result, sin@
            repeat 2
                    rad = i&0xFF
                    sign = 1
                    if rad>=128: sign = -1: rad - 128
                    if rad>=64: rad = 128-rad
                    result = sintable@.rad*sign
                    dup result, cos@: i+ 64
            loop
    return
    #global
    
    
    ;●使い方
            sincos 128; 256で一周。
            mes "sin = "+sin+"/256"; 出力は256倍
            mes "cos = "+cos+"/256"; 出力は256倍
    
    

使い方

sincos モジュールの一番便利な使い方は

        sincos 角度
        x = cos*距離/256
        y = sin*距離/256

とすると、指定した角度と距離から座標が計算できることです。

; さっきのモジュールをここにインクルードして

#const Radius 200

        repeat 256
                await 50
                sincos cnt
                x = cos*Radius/256
                y = sin*Radius/256
                line x+320, y+240, 320, 240
        loop
stop

応用しだいでいろんなことに使えます。

関連リンク