1/* -*-ePiX-*- */
2#include "epix.h"
3using namespace ePiX;
4
5// ODE parameters
6const double A1(10);
7const double A2(28);
8const double A3(2.6666);
9
10// parameter box
11const double MAX(30);
12
13// bounding box (set in screens)
14const double XMAX(50);
15
16// flow time
17const double TMAX(2000);
18
19P F(double x, double y, double z)
20{
21  return 0.01*P(A1*(y-x), x*(A2-z)-y, x*y-A3*z);
22}
23
24domain R(P(-MAX,-MAX,0), P(MAX,MAX,2*MAX), mesh(6, 6, 6));
25
26void draw_frame()
27{
28  dart_field(F, R.resize1(0,MAX), 0.5);
29
30  bold(Red());
31  ode_plot(F, P(10,0,0), 0, TMAX, TMAX);
32
33  pen(Blue());
34  // nearby start points, but trajectories not close
35  ode_plot(F, P(10.5,0,0), 0, TMAX, TMAX);
36
37  plain(Black());
38  dart_field(F, R.resize1(-MAX,0), 0.5);
39}
40
41// initialize the camera
42void init_cam(const P& arg)
43{
44  camera.at(arg);
45  camera.look_at(P(0,0,MAX));
46  camera.range(500);
47}
48
49int main()
50{
51  picture(P(-1,0), P(1,1), "6x3in");
52
53  begin();
54
55  screen  left_eye(P(-XMAX,-XMAX), P(XMAX,XMAX));
56  activate(left_eye);
57  init_cam(P(-100, 90, 63));
58  draw_frame();
59
60  screen right_eye(P(-XMAX,-XMAX), P(XMAX,XMAX));
61  activate(right_eye);
62  init_cam(P(-100, 80, 63));
63  draw_frame();
64
65  // page layout
66  inset(left_eye, P(0,0), P(1,1));
67  inset(right_eye, P(-1,0), P(0,1));
68
69  end();
70}
71