summaryrefslogtreecommitdiff
path: root/graphics/epix/samples/pole.xp
blob: 435c258a6828c1c0f24b404a38549bae172b3c55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

const int M(8);
double MAX(1.5), Bd(2);

P F(double x, double y) // fake pole
{
  return P(x, y, x/(0.01+x*x+y*y));
}

P pt1(-MAX,-MAX), pt2(MAX, MAX);
domain R(pt1, pt2, mesh(2*M,2*M), mesh(6*M,6*M));

int main()
{
  picture(P(-Bd,-Bd), P(Bd,Bd), "2.5x2.5in");

  begin();

  label(P(xmax(), 2.5), P(-2,-2),
        "$z=\\mathrm{Re}\\,\\displaystyle\\frac{1}{x+iy}$", bl);

  camera.at(P(6,8,5));

  clip_box(P(-Bd,-Bd,-Bd), P(Bd,Bd,0));

  plain(Magenta());
  fill(White());
  surface(F, R); // bottom half

  grid(pt1, pt2, M, M); // axes

  pen(White(0.75), "0.15pt");
  plot(F,R);    // simulate transparency

  clip_box(P(-Bd,-Bd,-Bd), P(Bd,Bd,2*Bd)); 
  plain(Magenta());

  // axes and labels
  arrow(P(-Bd,0,0), P(Bd,0,0));
  label(P(Bd,0), P(-4,-2), "$x$", l); 

  arrow(P(0,-Bd,0), P(0,Bd,0));
  label(P(0,Bd), P( 2,-2), "$y$", br);

  arrow(P(0, 0, 0), P(0,0,2.5));
  label(P(0,0,2.5), P(0,4), "$z$", t);

  clip_box(P(-Bd,-Bd,0),P(Bd,Bd,Bd));

  surface(F,R); // top half

  bbold(Red());
  plot(F, R.resize1(0.25,MAX).slice2(0));

  pst_format();
  end();
}