1/* -*-ePiX-*- */ 2#include "epix.h" 3using namespace ePiX; 4 5// Style parameters 6const int MAX(1); // maximum coordinate 7 8domain R(P(-MAX,-MAX), P(MAX, MAX), (24, 24), mesh(72,72)); 9 10const double sqrt3(sqrt(3)); 11 12// function to be graphed 13P f(double x, double y) 14{ 15 return P(x, y, 0.75*y*(y-sqrt3*x)*(y+sqrt3*x)); 16} 17 18P color(double u, double v, double w) 19{ 20 return P(-0.5*w, 0.25*w, 0.95*w); 21} 22 23int main() 24{ 25 picture(P(-2*MAX,-2*MAX), P(2*MAX,2*MAX), "6 x 6in"); 26 27 begin(); 28 29 border(Green(0.6), "1pt"); 30 backing(Black()); 31 32 camera.at(sph(4*MAX, M_PI/6, M_PI/6)); 33 34 // positioned for viewpt in first orthant 35 yellow(); 36 grid(P(-MAX,-MAX,-MAX), P(MAX,MAX,-MAX), 4, 4); 37 grid(P(-MAX,-MAX,-MAX), P(MAX,-MAX,MAX), 4, 4); 38 grid(P(-MAX,-MAX,-MAX), P(-MAX,MAX,MAX), 4, 4); 39 40 axis Ax(P(-MAX,-MAX,MAX), P(MAX,-MAX,MAX), 4, P(0,6), t); 41 axis Ay(P(MAX,-MAX,-MAX), P(MAX,MAX,-MAX), 4, P(-2,-2), bl); 42 axis Az(P(MAX,-MAX,-MAX), P(MAX,-MAX,MAX), 4, P(-2,-2), bl); 43 44 Ax.frac().draw(); 45 Ay.frac().draw(); 46 Az.frac().draw(); 47 48 clip_box(P(MAX,MAX,MAX)); 49 50 // wire mesh surface 51 plain(Green()); 52 plot(f, R); 53 54 // level bands 55 plain(Red()); 56 57 for (int i=-5; i <=5; ++i) 58 { 59 clip_slice(P(0,0,0.2*i), P(0,0,1), 0.1); 60#ifdef FLATFILL 61 fill(RGB(0.25+0.1*i, 0, -0.1*i)); // index-dependent coloring 62 surface(f, R); 63#else 64 surface(f, R, color); // domain- or position-dependent coloring 65#endif 66 clip_restore(); // remove temporary slicing planes, keep clip box 67 } 68 69 pst_format(); 70 end(); 71} 72 73