summaryrefslogtreecommitdiff
path: root/graphics/epix/samples/wheel.xp
blob: e8056f8658408018a802d1ff02e7099ab61b2d38 (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
/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

P F(double t, double r)
{
  return P(t-r*Sin(t), 1-r*Cos(t)); // a cycloid
}

int main()
{
  picture(P(0,0), P(15,27), "4 x 7.2in");

  begin();

  const double dt(5*M_PI/11);
  double t(dt);

  for(int i=0; i < 9; ++i, t += dt)
    {
      screen scr(P(-1,0), P(15,2)); // drawing area
      activate(scr);

      plain(Black());
      line(P(-1, 0), P(15, 0)); // the ground

      circle(P(t,1), 1); // the wheel

      // [0,t] x [0,1]
      domain R(P(0,0), P(t, 1), mesh(10*i,5), mesh((int) ceil(1+4*t), 5));

      // the paths
      bold();
      for (int j=0; j < 6; ++j)
        {
          pen(RGB(1-0.125*j, 0.125*j, 0.5+0.125*j));
          plot(F, R.slice2(0.2*j));
        }

      // the spoke
      bold(Green());
      line(P(t,1), F(t,1));

      inset(P(0, 25-3*i), P(15, 27-3*i)); // page layout
      deactivate(scr);
    }

  end();
}