ゲームを作りたい人のための ソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです


<< オブジェクトのドラッグver3 | main | ジャパニーズアトラクタ >>



ローレンツアトラクタ

ローレンツアトラクタを描写するプログラムです

三次元上に描写して、立体的に見えるようにしました

 

 

#include "d3m.hsp"
#define global sgm 10.0
#define global r 28.0
#define global b 8.0/3.0
;ローレンツ方程式の関数
#module
#defcfunc m_f double x,double y
    return sgm*(-x + y)
#defcfunc m_g double x,double y,double z
    return r*x - y - x*z
#defcfunc m_h double x,double y,double z
    return -b*z + x*y
#global
ddim ps,3    ;現在位置
ddim nps,3    ;描写位置
ddim k,3,4
ddim calc,3
dt=0.01    ;時間
n=5000    ;繰り返し回数
kd=20    ;拡大率
repeat
    ct++
    redraw 0
    color:boxf:color 255,255,255
    ;カメラを回転させる
    d3setcam cos(0.04*ct)*1500,sin(0.04*ct)*1500,cos(0.03*ct)*1000,,,500
    ps=1.0,1.0,1.0
    d3initlineto
    repeat n:i=cnt
        ;4次ルンゲクッタ法
        k(0,0)=dt*m_f(ps(0),ps(1))
        k(1,0)=dt*m_g(ps(0),ps(1),ps(2))
        k(2,0)=dt*m_h(ps(0),ps(1),ps(2))
    
        k(0,1)=dt*m_f(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2)
        k(1,1)=dt*m_g(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2,ps(2)+k(2,0)/2)
        k(2,1)=dt*m_h(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2,ps(2)+k(2,0)/2)
        
        k(0,2)=dt*m_f(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2)
        k(1,2)=dt*m_g(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2,ps(2)+k(2,1)/2)
        k(2,2)=dt*m_h(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2,ps(2)+k(2,1)/2)
        
        k(0,3)=dt*m_f(ps(0)+k(0,2),ps(1)+k(1,2))
        k(1,3)=dt*m_g(ps(0)+k(0,2),ps(1)+k(1,2),ps(2)+k(2,2))
        k(2,3)=dt*m_h(ps(0)+k(0,2),ps(1)+k(1,2),ps(2)+k(2,2))
        repeat 3
            nps(cnt)=ps(cnt)+(k(cnt,0)+k(cnt,1)*2.0+k(cnt,2)*2.0+k(cnt,3))/6.0
            ps(cnt)=nps(cnt)
        loop
        ;描写
        d3lineto nps(0)*kd,nps(1)*kd,nps(2)*kd
    loop
    redraw
    await
loop

0
    posted by higashijugem 15:54comments(0)|-|


    この記事に対するコメント