diff options
| author | Franklin Wei <me@fwei.tk> | 2019-02-04 18:16:49 -0500 |
|---|---|---|
| committer | Franklin Wei <me@fwei.tk> | 2019-02-04 18:16:49 -0500 |
| commit | cf7eff7aab751fd1b599d967ee156c7ebb61cbbd (patch) | |
| tree | 04c414b2c7b7b42ea80e157458ac5228e04e45dd /curve.h | |
| parent | f02c73a1cde15f55eac0ee2ecd0a10b6778d8b6c (diff) | |
| download | fieldviz-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.h | 44 |
1 files changed, 34 insertions, 10 deletions
@@ -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 |