doc/examples/by_class/plotter_2d/multi_plot.cpp File Reference

example program for class smtk::plotter_2d More...


Detailed Description

example program for class smtk::plotter_2d

Reference Tutorial Example Code
smtk::plotter_2d interactive phase space plotter
damped_SHO.cpp
damped_pendulum.cpp
lotka_volterra.cpp
multi_plot.cpp

This example interactively solves damped simple harmonic oscillator with multiple initial conditions.

// doc/plotter_2d.dox should be consistent with this file.

#include <math.h>
#include <smtk.h>
#include <smtk/rk4.h>
#include <smtk/plotter_2d.h>

static const double pi = 3.1415926535897932385;
static const double b = 0.1;  // parameter: damping constant
static const int num_plots = 51; // number of plots

static double       x[2*num_plots];
static double       t;    // time

static void difeq(double *xdot, const double *x, double t)
{
  int i=0;
  for(;i<num_plots;i++)
    {
      xdot[0+i*2] = x[1+i*2];
      xdot[1+i*2] = - x[0+i*2] - b * x[1+i*2];
    }
}

static smtk::rk4<double,double,double>
rk4(difeq, /* differential equations call-back function */
    2*num_plots,     /* 2 equations */
    0.04   /* time step */);

static double *init(double x_in, double y_in, bool &do_draw)
{
  const double aspect = 1.0; // x_radius/y_radius
  const double radius = 1.5;
  const double x_radius = radius/aspect;
  const double v_radius = radius*aspect;
  t = 0.0;  // time

  int i=0;
  for(;i<num_plots;i++)
    {
      x[0+i*2] = x_in + x_radius * cos(2*pi*i/num_plots); // position
      x[1+i*2] = y_in + v_radius * sin(2*pi*i/num_plots); // velocity
    }

  return x;
}

static double *step(bool &do_draw, bool &show_line)
{
  rk4.go(x, &t);

  // usleep slows this down.  Remove/add this to speed/slow it up.
  usleep(10000);

  return x;
}

int main(void)
{
  smtk::plotter_2d plotter;

  plotter.
    set_window_title("Damped Simple Harmonic Oscillator "
                     "with many initial conditions").
    set_callbacks(num_plots, init, step).
    set_line_width(3).
    set_point_width(2).
    set_scale(-2.0, 2.0, -2.1, 2.1).
    run();

  return 0;
}

Generated on Sat Aug 11 22:25:56 2007 for Simulation Toolkit (SmTk) by  doxygen 1.5.2