Exemples de la distribution

En cliquant sur une imagette, vous accéderez au source et à l'image. En cliquant sur cette dernière, vous ouvrirez le fichier PDF associé.

calculus.xpclipping.xpcontour.xpcropplot.xpdenom.xpgeomsum.xpkoch.xplevelset.xplissajous.xpnewton.xp
oscillator.xp [ source ] [ fermer ]
oscillator.xp
/* -*-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"
inline double f1(double t) { return f(t,2); }
// "Observed"
inline double f2(double t) { return f1(t)+0.1*Cos(3*t); }
//"error"
inline double err(double t) { return 0.125*(1+fabs(f1(t))); }

// Number of error bars
const int samples=8;

void error_bar(P center, double error)
{
  P top    = center + P(0,error);
  P bottom = center - P(0,error);

  line(bottom,top);
  v_axis_tick(top);
  v_axis_tick(bottom);
}

// Half-size of bounding box
const int N=2;

int main() 
{
  bounding_box(P(0,-N),P(2*N,N));
  unitlength("1in");
  picture(2.5,2.5);

  begin();

  double x_avg = 0.5*(x_min + x_max);
  // displacement for miscellaneous labels/objects
  const double delta=0.0625*x_size;

  // legend label locations
  P predicted(x_avg + delta, y_min + 2*delta);
  P observed( x_avg + delta, y_min +   delta);
 
  // graph paper
  grid(N*(int)x_size, N*(int)y_size);
  pen(0.15);
  grid(5*N*(int)x_size,5*N*y_size);

  h_axis_masklabels(P(x_min+1,0), P(x_max,0), x_size-1, P(0,2), t);
  v_axis_labels(P(0,y_min), P(0,y_max), y_size, P(-2, 0), l);

  masklabel(predicted+P(delta), P(4,0), "Predicted", r);
  masklabel(observed+P(delta),  P(4,0), "Observed" , r);

  // axes, names, and labels
  bold();
  dart(P(x_min,0), P(x_max+delta,0));
  dart(P(0,y_min), P(0,y_max+delta));

  label(P(x_max+delta,0), P(2,0), "Time (sec)", r);
  label(P(0,0), P(-18,0), "\\rotateleft{Displacement (cm)}",l);

  // "Predicted" curve
  rgb(0.2, 0.7, 0.8);
  plot(f1, x_min, x_max, 120);

  // legend
  line(predicted-P(delta), predicted+P(delta));

  red();
  // legend
  error_bar(observed, 0.5*delta);

  // "error bars"
  for (int i=1; i < samples; ++i)
    {
      double t=x_min + i*x_size/samples;
      error_bar(P(t, f2(t)), err(t));
    }

  plain();
  // legend
  circ(observed);

  // "data points"; interleaving interferes with color
  for (int i=1; i < samples; ++i)
    {
      double t=x_min + i*x_size/samples;
      circ(P(t,f2(t)));
    }

  // figure title
  black();
  masklabel(P(x_avg, y_max), P(0,2), "A damped harmonic oscillator", t);

  end();
}
parabola.xppascal.xppolar.xppole.xpshadeplot.xpslopefield.xpsphere.xpsqrt.xptorus.xpuppersum.xpweierstrass.xpwheel.xp