# Plot a 3D function require 'gifplot' include Gifplot include Math # Here is the function to plot def func(x,y) return 5*cos(2*sqrt(x*x+y*y))*exp(-0.3*sqrt(x*x+y*y)) end # Here are some plotting parameters XMIN = -5.0 XMAX = 5.0 YMIN = -5.0 YMAX = 5.0 ZMIN = -5.0 ZMAX = 5.0 # Grid resolution NXPOINTS = 60 NYPOINTS = 60 cmap = new_ColorMap("cmap") frame = new_FrameBuffer(500,500) FrameBuffer_clear(frame,BLACK) P3 = new_Plot3D(frame,XMIN,YMIN,ZMIN,XMAX,YMAX,ZMAX) Plot3D_lookat(P3,2*[XMAX-XMIN,YMAX-YMIN,ZMAX-ZMIN].max) Plot3D_autoperspective(P3,40) Plot3D_rotu(P3,60) Plot3D_rotr(P3,30) Plot3D_rotd(P3,10) def drawsolid() Plot3D_clear(P3,BLACK) Plot3D_start(P3) dx = 1.0*(XMAX-XMIN)/NXPOINTS dy = 1.0*(YMAX-YMIN)/NYPOINTS cscale = 240.0/(ZMAX-ZMIN) x = XMIN for i in 0...NXPOINTS y = YMIN for j in 0...NYPOINTS z1 = func(x,y) z2 = func(x+dx,y) z3 = func(x+dx,y+dy) z4 = func(x,y+dy) c1 = cscale*(z1-ZMIN) c2 = cscale*(z2-ZMIN) c3 = cscale*(z3-ZMIN) c4 = cscale*(z4-ZMIN) c = (c1+c2+c3+c4)/4 c = 0 if (c < 0) c = 239 if c > 239 Plot3D_solidquad(P3,x,y,z1,x+dx,y,z2,x+dx,y+dy,z3,x,y+dy,z4,c+16) y = y + dy end x = x + dx end end puts "Making a nice 3D plot..." drawsolid() FrameBuffer_writeGIF(frame,cmap,"image.gif") puts "Wrote image.gif"