NB. Original OpenGL script is written by Oleg Kobchenko NB. 19/12/08 M.Shimura NB. Last update 15/JAN./2009 NB. lorenz equation script is written by K.Yamashita NB. Usage: NB. * opengl_run 0 NB. lorenz 3d NB. * opengl_run 1 NB. rossler 3d NB. * 10 28 8r3&calc_lorenz plot_lorenz 5 8 10 NB. * 0.2 0.2 14&calc_rossler plot_lorenz 1 1 1 NB. ---------------------------- require 'plot opengl numeric' NB. coclass 'plorenz' coinsert 'jzopenglutil' gsetdefaults'' NB. ----------calc---------------- dt=: 0.005 lz=:4 : 0 NB. Lorenz attractor 's r b'=. x NB. parameter 'xx yy zz'=: y NB. initial 5 8 10 or 1 1 1 X=: xx + dt*s*(yy-xx) Y=: yy + dt*((r*xx)-(yy+xx*zz)) Z=: zz + dt*((xx*yy)-b*zz) X,Y,Z ) rsr=:4 : 0 NB. Rossler attractor 'a b c'=. x NB. 0.2 0.2 14 'xx yy zz'=: y X=: xx + dt*-(yy+zz) Y=: yy + dt* xx + a*yy Z=: zz + dt* (b+ (xx*zz)-c*zz) X,Y,Z ) calc_lorenz=:4 : ' <"1 |: x lz ^:(i.20000) y' NB. 10 50 8r3&calc_lorenz plot_lorenz init calc_rossler=:4 : ' <"1 |: x rsr ^:(i.100000) y' NB. 0.2 0.2 14&calc_rossler plot_lorenz 1 1 1 NB. logistics caos NB. plot a;(a=.steps 0 4 100)& (* (*~ -.)) ^:(100+i.100) 0.1 vtr=: 4 : 0 NB. Lotka-Volterra Model NB. x is 2r3 1r300 1r2 1r2 NB. Usage: plot {|: PAR&vtr ^:(i.30000) FST 'a b c d'=: x 'xx yy'=: y X=: xx + dt * -xx*(a - b*yy) NB. enemy Y=: yy + dt * yy*(c - d*xx) NB. butterfly X,.Y ) NB. dt is 0.01 PAR=:2r3 1r300 1r2 1r2 NB. parameter enemy FST=: 1 100 NB. 10000 1000000 NB. first individual plot_lorenz=:1 : 0 NB. 10 50 8r3&calc_lorenz plot_lorenz init pd 'reset' pd 'noaxes' pd 'viewpoint 1.6 _2.4 _1.3' pd u y pd 'show' ) NB. ========Oleg's Script=of Lorenz================================================ NB. '`X Y Z'=: (0&{)`(1&{)`(2&{) NB. ' s r b'=: 10 , 28 , 8%3 NB. dx=: s*(Y - X) NB. dy=: (X * r - Z) - Y NB. dz=: (X*Y) - b*Z NB. dt=: 0.01 NB. I=: + dt * dx,dy,dz NB. -------OpenGL------------------------------ OPENGL=: 0 : 0 pc opengl; xywh 0 2 400 225;cc g isigraph opengl rightmove bottommove; xywh 0 0 48 12;cc rolenz button;cn "lrz"; pas 0 0;pcenter; rem form end; ) opengl_run=: 3 : 0 wd OPENGL ogl=: '' conew 'jzopengl' select_graph y wd'pshow;' ) opengl_close=: 3 : 0 destroy__ogl'' ogl=: '' wd 'pclose' ) NB. --------------------------------------------------------- select_graph=: 3 : 0 select. y case. 0 do. NB. Lorenz L=: 0.09* 10 28 8r3 lz ^:(i. 10000) 1 1 1 SPHERESIZE=: 0.03 'SPHERE MODEL'=: 2041+i.2 GS_ROTXYZ=: 355.519 359.069 321.959 GS_TRNXYZ=: 0.025 0.325 0 case. 1 do. NB. Rossler L=: 0.075* 0.2 0.2 14 rsr ^:(i. 20000) 1 1 1 T=: -([:-:>./+<./)"1|:L SPHERESIZE=: 0.025 NB. 0.03 'SPHERE MODEL'=: 2041+i.2 GS_ROTXYZ=: 351 353 321 GS_TRNXYZ=: 0.025 0.325 0 end. ) NB. --------------------------------------------------------- paint=: 3 : 0 if. gsinit GS_LIGHT do. quad=. {.>gluNewQuadric'' gsnewlist SPHERE gluSphere quad,SPHERESIZE,10 10 gsendlist'' gluDeleteQuadric quad init makelist MODEL '' end. glCallList MODEL gsfini'' ) init=: 3 : 0 gscolor LIME NB. GRAY glPushMatrix '' glTranslate T SPHERE list_at L glPopMatrix '' ) list_at=: 4 : 0 "1 glPushMatrix '' glTranslate y glCallList x glPopMatrix '' ) NB. ========================================================= opengl_g_paint=: paint opengl_g_char=: gschar opengl_default=: gsdefault NB. opengl_run'' NB. =draw container box======================================================= LORENZOGL=: 0 : 0 pc lorenzogl; xywh 148 4 44 24;cc draw button;cn "DRAW"; xywh 150 57 44 12;cc cancel button;cn "EXIT"; xywh 83 32 56 11;cc rb0 radiobutton;cn "Lorenz"; xywh 84 42 56 12;cc rb1 radiobutton group;cn "Rossler"; xywh 5 33 61 11;cc rb2 radiobutton group;cn "Lorenz"; xywh 5 44 53 12;cc rb3 radiobutton group;cn "Rossler"; xywh 5 56 97 11;cc rb4 radiobutton group;cn "Lotka/Volterra"; xywh 0 0 141 73;cc graph groupbox;cn "Caos Graphics"; xywh 5 14 60 11;cc d3 static;cn "3D/2D"; xywh 76 15 60 11;cc ogl static;cn "OpenGL"; pas 6 6;pcenter; rem form end; ) lorenzogl_run=: 3 : 0 wd LORENZOGL NB. initialize form here wd 'set rb2 1' NB. set radio button wd 'pshow;' ) lorenzogl_draw_button=: 3 : 0 RDX=:I. (+/ e. rb0,rb1,rb2,rb3,rb4) e. 1 NB. position of radiobutton NB. select. statement is denaild ??? if. 0 = RDX do. opengl_run 0 end. if. 1 = RDX do. opengl_run 1 end. if. 2 = RDX do. 10 50 8r3&calc_lorenz plot_lorenz 1 1 1 end. if. 3 = RDX do. 0.2 0.2 14&calc_rossler plot_lorenz 1 1 1 end. if. 4 = RDX do. plot {|: PAR&vtr ^:(i.100000) FST end. ) lorenzogl_close=: 3 : 0 wd'pclose' ) lorenzogl_cancel_button=: 3 : 0 lorenzogl_close'' ) lorenzogl_run''