polly-b-gone/src/physics/force.h
2012-12-14 10:07:01 -08:00

105 lines
1.7 KiB
C++

// -*- C++ -*-
#ifndef MBOSTOCK_FORCE_H
#define MBOSTOCK_FORCE_H
#include "vector.h"
namespace mbostock {
class Particle;
class UnaryForce {
public:
virtual ~UnaryForce() {}
void apply(Particle& p);
virtual Vector force(const Particle& p) = 0;
};
class BinaryForce {
public:
virtual ~BinaryForce() {}
void apply(Particle& a, Particle& b);
virtual Vector force(const Particle& a, const Particle& b) = 0;
};
class RandomForce : public UnaryForce {
public:
RandomForce(float k);
virtual Vector force(Particle& p);
private:
float k_;
};
class GravitationalForce : public UnaryForce {
public:
GravitationalForce(float g);
virtual Vector force(const Particle& p);
private:
float g_;
};
class LinearDragForce : public UnaryForce {
public:
LinearDragForce(float kd);
virtual Vector force(const Particle& p);
private:
float kd_;
};
class QuadraticDragForce : public UnaryForce {
public:
QuadraticDragForce(float kd);
virtual Vector force(const Particle& p);
private:
float kd_;
};
class HookeForce : public BinaryForce {
public:
HookeForce(float r, float ks);
virtual Vector force(const Particle& a, const Particle& b);
private:
float r_;
float ks_;
};
class DampenedHookeForce : public BinaryForce {
public:
DampenedHookeForce(float r, float ks, float kd);
virtual Vector force(const Particle& a, const Particle& b);
private:
float r_;
float ks_;
float kd_;
};
class CoulombForce : public BinaryForce {
public:
CoulombForce(float e);
virtual Vector force(const Particle& a, const Particle& b);
private:
float e_;
};
}
#endif