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