polly-b-gone/physics/translation.h
2012-12-14 09:47:48 -08:00

70 lines
1.4 KiB
C++

// -*- C++ -*-
#ifndef MBOSTOCK_TRANSLATION_H
#define MBOSTOCK_TRANSLATION_H
#include "shape.h"
#include "transform.h"
#include "vector.h"
namespace mbostock {
class Translation : public Transform {
public:
Translation(const Vector& x0, const Vector& x1,
float s, float u, float kd);
enum Mode { REVERSE, RESET, ONE_WAY };
/* Sets the translation mode. The default is REVERSE. */
void setMode(Mode m);
/** Translates the specified point. */
Vector point(const Vector& x) const;
/** Inverse-translates the specified point. */
Vector pointInverse(const Vector& x) const;
/** Advances the translation by one time step. */
virtual void step();
/** Resets the translation. */
virtual void reset();
/** Returns the current velocity. */
const Vector& velocity() const;
/** Returns the current origin. */
inline const Vector& origin() const { return origin_; }
private:
void update();
Vector x0_;
Vector x1_;
float s_;
float u_;
float kd_;
Vector v_;
Vector dv_;
Vector x_;
Vector origin_;
Mode mode_;
bool reversed_;
};
class TranslatingShape : public Shape {
public:
TranslatingShape(const Shape& s, const Translation& t);
virtual bool intersects(const Sphere& s) const;
virtual Projection project(const Vector& x) const;
private:
const Shape& shape_;
const Translation& translation_;
};
}
#endif