aboutsummaryrefslogtreecommitdiff
path: root/curve.h
diff options
context:
space:
mode:
Diffstat (limited to 'curve.h')
-rw-r--r--curve.h31
1 files changed, 28 insertions, 3 deletions
diff --git a/curve.h b/curve.h
index 19c41c7..5f11351 100644
--- a/curve.h
+++ b/curve.h
@@ -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