#include #include #include #ifdef WIN32 #include #define WINTYPE 0 /* gcc g2_shm.c -DWIN32 -lg2 -lm -lkernel32 -lgdi32 -luser32 -lcomdlg32 -o g2_shm.exe */ #endif #ifdef XWIN #include #include /* so I can use pause() */ #define WINTYPE 1 /* gcc g2_shm.c -o g2_shm -DXWIN -L/usr/X11R6/lib64 -L/usr/local/lib -lg2 -lm -lX11 -lXext -lgd */ #endif int main() { int i, dev, dev1,white, black,red; float x,v,x0,v0,h,t,l1,l2,k1,k2,k3,l3,E0,E; char strx[256],strv[256]; h = 0.02; x = 1.0; v = 0.0; if(WINTYPE==1) dev1=g2_open_X11(300,300); if(WINTYPE==0) dev1=g2_open_win32(300,300,"RH",0); g2_set_auto_flush(dev1,0); white=g2_ink(dev1, 1.0, 1.0, 1.0); black=g2_ink(dev1, 0.0, 0.0, 0.0); sprintf(strv, "%s", "v"); sprintf(strx, "%s", "x"); for(i=1;i<6000;i++){ k1=h*v; l1=-2.0*h*x*x*x; k2=h*(v+0.5*l1); l2=-2.0*h*(x+0.5*k1)*(x+0.5*k1)*(x+0.5*k1); k3=h*(v+l2); l3=-2.0*h*(x+k2)*(x+k2)*(x+k2); v=v+(l1+4.0*l2+l3)/6.0; x=x+(k1+4.0*k2+k3)/6.0; g2_pen(dev1, black); g2_line(dev1, 150.0, 0.0, 150.0, 300.0); g2_string(dev1, 155.0, 290.0, strv); g2_line(dev1, 0.0, 150.0, 300.0, 150.0); g2_string(dev1,290.0, 140.0, strx); g2_circle(dev1, 150.0+100.0*x, 150.0+100.0*v, 3); g2_flush(dev1); if(WINTYPE==1) usleep(1); g2_pen(dev1, white); g2_filled_rectangle(dev1, 0,0,300,300); } g2_flush(dev1); g2_close(dev1); return(0); }