]> git.donarmstrong.com Git - lilypond.git/blob - test/bow.cc
dc077b4f29966276e9085c4897f18f51aaeaf8ca
[lilypond.git] / test / bow.cc
1 // vim:sw=2 makeprg=g++\ -g\ bow.cc\ -o\ bow
2 #include <iostream.h>
3 #define PT
4 // #define STAFFHEIGHT 16.0
5 #define STAFFHEIGHT 20.0
6
7 #define UP 1
8 #define DOWN (-1)
9
10 // mmm
11 #define STANDALONE
12
13 #include <math.h>
14
15 typedef void *Paper_def;
16
17 bool experimental_features_global_b = true;
18
19 #include "bezier.hh"
20
21 #if 0
22 #include "offset.cc"
23 #include "interval.cc"
24 #endif
25
26 #include "misc.cc"
27 #include "bezier.cc"
28
29 struct Point
30 {
31   Real x, y;
32 };
33
34 void
35 out (Bezier_bow& b)
36 {
37   cout << "save dx,dy,x,y;\n";
38   for (int i = 0; i < 4; i++)
39       cout << "z" << i + 1 << " = (" << b.control_[i].x ()
40         << ", " << b.control_[i].y () << ");\n";
41   for (int i = 1; i < 3; i++)
42       cout << "z" << i + 4 << " = (" << b.return_[i].x ()
43         << ", " << b.return_[i].y () << ");\n";
44 #if 0
45   cout << "pickup pencircle scaled 0.5pt#;\n";
46   cout << "draw z2--z3; draw (50,0)-- 0.5[z2,z3];\n";
47 #endif
48   cout << "pickup pencircle scaled 4pt#;\n";
49   for (int i = 0; i < 4; i++)
50     cout << "drawdot z" << i + 1 << ";\n";
51   cout << "path boogje;\n";
52 #if 0
53   cout << "pickup pencircle scaled 0.4pt#;\n";
54   cout << "boogje=z1..controls z2 and z3..z4..controls z5 and z6..cycle;\n";
55   cout << "filldraw boogje;\n";
56 #else
57   cout << "pickup pencircle scaled 1.6pt#;\n";
58   cout << "boogje=z1..controls z2 and z3..z4;\n";
59   cout << "draw boogje;\n";
60   cout << "pickup pencircle scaled 0.4pt#;\n";
61   cout << "boogje:=z4..controls z5 and z6..z1;\n";
62   cout << "draw boogje;\n";
63 #endif
64   cout << "showit; shipit;clearit;" << endl;
65 }
66
67 void
68 bow (Point* points, int n, int d)
69 {
70   Array<Offset> notes;
71   for (int i = 0; i < n; i++)
72     notes.push (Offset (points[i].x, points[i].y));
73 #if 1
74   cout << "pickup pencircle scaled 8pt#;\n";
75 #else
76   cout << "pickup pencircle scaled 2pt#;\n";
77 #endif
78   for (int i = 0; i < n; i++)
79     cout << "drawdot (" << notes[i].x () << ", " << notes[i].y () << ");\n";
80   Bezier_bow b (0);
81   b.set (notes, d);
82   b.calc ();
83   out (b);
84   return;
85 }
86
87 int
88 main ()
89 {
90   //cout.unsetf(ios::scientific);
91   cout.setf(ios::fixed);
92 #if 1
93   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
94   bow ((Point[6]){ 0,0, 20,0, 40,30, 60,30, 80,0, 100,1 }, 6, 1);
95   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,10, 100,1 }, 6, 1);
96   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,40, 100,1 }, 6, 1);
97   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,40, 80,0, 100,1 }, 6, 1);
98   bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
99   bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
100   bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
101   bow ((Point[9]){ 0,0, 20,0, 40,-80, 60,0, 80,0, 100,0, 120,0, 140,0, 160,-1 }, 9, -1);
102   bow ((Point[9]){ 0,0, 40,0, 80,180, 120,0, 160,0, 200,0, 240,0, 280,0, 320,1 }, 9, 1);
103   bow ((Point[9]){ 
104   {0, 0}, 
105   {19.10645980317711, 1}, 
106   {29.402919606354207, 28}, 
107   {55.389379409531308, 1}, 
108   {73.530839212708514, 1}, 
109   {91.672299015885727, 1}, 
110   {111.35901367452229, 1}, 
111   {131.04572833315891, 1}, 
112   {145.76744299179552, 0}
113   }, 
114   9, 1);
115   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,40 }, 6, 1);
116   bow ((Point[2]){ 0,0, 20,0 }, 2, 1);
117   bow ((Point[2]){ 0,0, 20,-10 }, 2, 1);
118   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,100 }, 6, 1);
119
120   bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, 1);
121   bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, -1);
122   bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
123   bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
124   bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
125
126   bow ((Point[6]){ 0,-10, 20,-20, 40,0, 60,-40, 80,-20, 100,-50 }, 6, 1);
127
128   bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
129 #endif
130
131 #if 1
132   //clipping
133
134   bow ((Point[6]){ 0,0, 20,60, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
135
136   bow ((Point[6]){ 0,1, 20,0, 40,0, 60,0, 80,60, 100,0 }, 6, 1);
137   bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
138   bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,20, 100,100 }, 6, -1);
139   bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-20, 100,-100 }, 6, 1);
140   bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1);
141   bow ((Point[7]){ 0,0, 20,40, 100,0, 150,0, 200,0, 280,40, 300,0 }, 7, 1);
142   bow ((Point[7]){ 0,0, 20,40, 100,0, 150,0, 200,0, 280,40, 300,0 }, 7, 1);
143   bow ((Point[7]){ 0,20, 20,40, 100,0, 150,0, 200,0, 280,40, 300,20 }, 7, 1);
144   bow ((Point[3]){ 0,0, 10,10, 20,-20 }, 3, 1);
145 #endif
146
147 #if 1
148   // infeasible
149
150   bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
151   bow ((Point[6]){ 0,0, 20,-40, 40,0, 60,20, 80,20, 100,40 }, 6, -1);
152   bow ((Point[6]){ 0,0, 20,-20, 40,-20, 60,-20, 80,-80, 100,-40 }, 6, -1);
153   bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1);
154   bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
155 #endif
156
157
158   cout << "\\end" << endl;
159
160   return 0;
161 }
162