diff options
Diffstat (limited to 'graphics/epix/samples/oscillator.xp')
-rw-r--r-- | graphics/epix/samples/oscillator.xp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/graphics/epix/samples/oscillator.xp b/graphics/epix/samples/oscillator.xp new file mode 100644 index 0000000000..c174613cb0 --- /dev/null +++ b/graphics/epix/samples/oscillator.xp @@ -0,0 +1,89 @@ +/* -*-ePiX-*- */ +#include "epix.h" +using namespace ePiX; + +double f(double t, double a) { return 2*exp(-0.5*t)*Sin(a*t); } + +// Completely fabricated data +// "Predicted" +double f1(double t) +{ + return f(t,2); +} + +// "Observed" +double f2(double t) +{ + return f1(t)+0.1*Cos(3*t); +} + +//"error" +double err(double t) +{ + return 0.125*(1+fabs(f1(t))); +} + +// Number of error bars +const int samples(8); + +// Half-size of bounding box +const int N(2); + +int main() +{ + picture(P(0,-N),P(2*N,N), "2.5 x 2.5in"); + + begin(); + + // displacement for miscellaneous labels/objects + const double delta(0.0625*xsize()); + + // graph paper + pen(Black(0.25)); + grid(5*N*(int)xsize(),5*N*ysize()); + + pen(Black()); + grid(N*(int)xsize(), N*(int)ysize()); + + // axes, names, and labels + bold(); + dart(P(xmin(),0), P(xmax()+delta,0)); + dart(P(0,ymin()), P(0,ymax()+delta)); + + font_size("scriptsize"); + h_axis_masklabels(P(xmin()+1,0), P(xmax(),0), xsize()-1, P(0,2), c); + v_axis_labels(P(0,ymin()), P(0,ymax()), ysize(), P(-2, 0), l); + + font_size("footnotesize"); + label(P(xmax()+delta,0), P(2,0), "Time (sec)", r); + label_angle(M_PI_2); + label(P(0,0), P(-8,0), "Displacement (cm)",l); + label_angle(0); + + legend L; + L.item_border(0); + + // "Predicted" curve + pen(RGB(0.2, 0.7, 0.8)); + plot(f1, xmin(), xmax(), 120); + L.path_item("Predicted"); + + // "error bars" + red(); + L.mark_item(CIRC, "Measured"); + + for (int i=1; i < samples; ++i) + { + double t(xmin() + i*xsize()/samples); + v_error_bar(P(t, f2(t)), err(t), CIRC, 4); // 4 pt wide + } + + black(); + L.draw(canvas().br(), P(-2,2), tl); + + font_face("sc"); + label(P(0.5*(xmin()+xmax()), ymax()), P(0,2), + "A damped harmonic oscillator", t); + + end(); +} |