aboutsummaryrefslogtreecommitdiff
path: root/curve.h
diff options
context:
space:
mode:
authorFranklin Wei <me@fwei.tk>2019-02-04 18:16:49 -0500
committerFranklin Wei <me@fwei.tk>2019-02-04 18:16:49 -0500
commitcf7eff7aab751fd1b599d967ee156c7ebb61cbbd (patch)
tree04c414b2c7b7b42ea80e157458ac5228e04e45dd /curve.h
parentf02c73a1cde15f55eac0ee2ecd0a10b6778d8b6c (diff)
downloadfieldviz-cf7eff7aab751fd1b599d967ee156c7ebb61cbbd.zip
fieldviz-cf7eff7aab751fd1b599d967ee156c7ebb61cbbd.tar.gz
fieldviz-cf7eff7aab751fd1b599d967ee156c7ebb61cbbd.tar.bz2
fieldviz-cf7eff7aab751fd1b599d967ee156c7ebb61cbbd.tar.xz
Work on adding toroid
Diffstat (limited to 'curve.h')
-rw-r--r--curve.h44
1 files changed, 34 insertions, 10 deletions
diff --git a/curve.h b/curve.h
index e9e9642..52c7623 100644
--- a/curve.h
+++ b/curve.h
@@ -9,7 +9,7 @@ using namespace std;
class Curve {
public:
- virtual vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), double delta) = 0;
+ virtual vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const = 0;
};
class LineSegment : Curve {
@@ -18,7 +18,7 @@ private:
public:
LineSegment(vec3 a_, vec3 b_) : a(a_), b(b_) {};
- vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), double delta);
+ vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const;
};
class Arc : Curve {
@@ -30,11 +30,11 @@ private:
vec3 radius, normal;
/* how many radians the arc extends for (can be greater than 2pi) */
- double angle;
+ scalar angle;
public:
- Arc(vec3 c_, vec3 r_, vec3 n_, double th) : center(c_), radius(r_), normal(n_), angle(th) {};
+ 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), double delta);
+ vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const;
};
class Spiral : Curve {
@@ -46,13 +46,37 @@ private:
vec3 radius, normal;
/* how many radians the arc extends for (can be greater than 2pi) */
- double angle;
+ scalar angle;
- /* space between turns (2pi) */
- double pitch;
+ /* linear distance between turns (2pi) */
+ scalar pitch;
public:
- Spiral(vec3 c_, vec3 r_, vec3 n_, double th, double p) : origin(c_), radius(r_), normal(n_), angle(th), pitch(p) {};
+ 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), double delta);
+ vec3 integrate(vec3 (*integrand)(vec3 s, vec3 ds), scalar delta) const;
+};
+
+class Toroid : Curve {
+private:
+ vec3 origin;
+
+ /* these are relative to the center (direction will be determined
+ * by RHR of normal), and should be orthonormal */
+ vec3 major_radius, major_normal;
+
+ /* "thickness" of toroid */
+ scalar minor_r;
+
+ /* how many radians (about the center) the toroid extends for
+ * (can be greater than 2pi) */
+ scalar major_angle;
+
+ /* central angle between successive turns (2pi rotation of small
+ * radius vector) */
+ scalar pitch;
+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;
};
#endif