X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2FSGPlane.hxx;h=971e72c8e0e70eef11cba60d708903bd167bcd36;hb=914d3e6a2b323cf9f186cbef2aef7865ea07b309;hp=e7755e0efc983052015171ea606fd414829f8238;hpb=de020ee69524393daf11200aa0a46bfd5aa2409a;p=simgear.git diff --git a/simgear/math/SGPlane.hxx b/simgear/math/SGPlane.hxx index e7755e0e..971e72c8 100644 --- a/simgear/math/SGPlane.hxx +++ b/simgear/math/SGPlane.hxx @@ -23,14 +23,25 @@ class SGPlane { public: SGPlane() { } - SGPlane(const SGVec3& normal, T dist) : + SGPlane(const SGVec3& normal, const T& dist) : _normal(normal), _dist(dist) { } + SGPlane(const SGVec3& normal, const SGVec3& point) : + _normal(normal), _dist(-dot(normal, point)) + { } SGPlane(const SGVec3 vertices[3]) : _normal(normalize(cross(vertices[1] - vertices[0], vertices[2] - vertices[0]))), _dist(-dot(_normal, vertices[0])) { } + SGPlane(const SGVec3& v0, const SGVec3& v1, const SGVec3& v2) : + _normal(normalize(cross(v1 - v0, v2 - v0))), + _dist(-dot(_normal, v0)) + { } + template + explicit SGPlane(const SGPlane& plane) : + _normal(plane.getNormal()), _dist(plane.getDist()) + { } void setNormal(const SGVec3& normal) { _normal = normal; } @@ -42,6 +53,10 @@ public: const T& getDist() const { return _dist; } + /// Return a point on the plane + SGVec3 getPointOnPlane() const + { return -_dist*_normal; } + /// That is the distance where we measure positive in direction of the normal T getPositiveDist() const { return -_dist; }