diff options
Diffstat (limited to 'curve.h')
| -rw-r--r-- | curve.h | 31 |
1 files changed, 28 insertions, 3 deletions
@@ -2,14 +2,15 @@ #define CURVE_H #include <cmath> +#include <iostream> #include "vec3.h" #include "quat.h" -using namespace std; - +/* All curves inherit this class */ class Curve { public: virtual vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const = 0; + virtual const char *name() const = 0; }; class LineSegment : Curve { @@ -19,8 +20,14 @@ public: LineSegment(vec3 a_, vec3 b_) : a(a_), b(b_) {}; vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const; + + const char *name() const { return "LineSegment"; } + + friend std::istream operator>>(std::istream &is, LineSegment &ls); }; +std::istream operator>>(std::istream &is, LineSegment &ls); + class Arc : Curve { private: vec3 center; @@ -35,8 +42,14 @@ public: Arc(vec3 c_, vec3 r_, vec3 n_, scalar th) : center(c_), radius(r_), normal(n_), angle(th) {}; vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const; + + const char *name() const { return "Arc"; } + + friend std::istream operator>>(std::istream &is, LineSegment &ls); }; +std::istream operator>>(std::istream &is, LineSegment &ls); + class Spiral : Curve { private: vec3 origin; @@ -54,8 +67,14 @@ public: Spiral(vec3 c_, vec3 r_, vec3 n_, scalar th, scalar p) : origin(c_), radius(r_), normal(n_), angle(th), pitch(p) {}; vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const; + + const char *name() const { return "Solenoid"; } + + friend std::istream operator>>(std::istream &is, LineSegment &ls); }; +std::istream operator>>(std::istream &is, LineSegment &ls); + class Toroid : Curve { private: vec3 origin; @@ -66,7 +85,7 @@ private: /* "thickness" of toroid */ scalar minor_r; - + /* how many radians (about the center) the toroid extends for * (can be greater than 2pi) */ scalar major_angle; @@ -79,5 +98,11 @@ public: Toroid(vec3 o, vec3 maj_r, vec3 maj_n, scalar ang, scalar min_r, scalar p) : origin(o), major_radius(maj_r), major_normal(maj_n), major_angle(ang), minor_r(min_r), pitch(p) {}; vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const; + + const char *name() const { return "Toroid"; }; + + friend std::istream operator>>(std::istream &is, LineSegment &ls); }; + +std::istream operator>>(std::istream &is, LineSegment &ls); #endif |