| # Plot a 3D function |
| # This example uses the low-level C interface. |
| |
| from _gifplot import * |
| from math import * |
| |
| # 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)) |
| |
| # 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*max([xmax-xmin,ymax-ymin,zmax-zmin])) |
| 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 xrange(0,nxpoints): |
| y = ymin |
| for j in xrange(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 = int((c1+c2+c3+c4)/4) |
| if (c < 0) : c = 0 |
| if c > 239 : 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 |
| x = x + dx |
| |
| print "Making a nice 3D plot..." |
| drawsolid() |
| |
| FrameBuffer_writeGIF(frame,cmap,"image.gif") |
| print "Wrote image.gif" |
| |