/** * @file plane3d.h * * @auhtor Remus Claudiu Dumitru * @date 16 Feb 2012 * */ #ifndef PLANE3D_H_ #define PLANE3D_H_ //============================================================================== // Includes //============================================================================== #include "model/vector3d.h" #include namespace model { /** * A class defining a plane. */ class Plane3d { private: /** * used to determine if vertical */ static constexpr double _EPSILON_VERTICAL = 0.02; /** * used to determine if horizontal */ static constexpr double _EPSILON_HORIZONTAL = 0.02; /** * if two planes are this close in cm * then they may be considered to be the same */ static constexpr double _EPSILON_DISTANCE = 20; /** * if the length of the crossproduct of two normals is less than this * then the planes may be considered to be the same */ static constexpr double _EPSILON_NORMAL_CROSS_PRODUCT = 2e-1; public: /** * the normal defining the plane */ Vector3d normal; /** * the point of application of the normal */ Point3d pt; /** * the convex hull of this plane */ std::vector hull; Plane3d(); Plane3d(const Point3d& pt, const Vector3d& normal); Plane3d(const Point3d& pt, const Vector3d& normal, const std::vector& hull); Plane3d(const Plane3d& other); virtual ~Plane3d(); /** * compute the intersection of three planes */ Point3d intersect(const Plane3d& first, const Plane3d& second); /** * copies one plane to another */ Plane3d& operator=(const Plane3d& other); /** * returns true if a plane is vertical within some predefined epsilon values */ bool isVertical(); /** * returns true if a plane is horizontal within some predefined epsilon values */ bool isHorizontal(); /** * returns true if this plane replresents the same plane as other * within some predefined epsilon values */ bool isSamePlane(Plane3d other); /** * Computes the normal of the plane from the hull. */ Vector3d computeAverageNormal(); /** * Returns the 3D coordinates of points on the plane, which have a fixed * distance to their next neighbor. */ std::vector > getDiscretePoints(const double& dist) const; }; } /* namespace model */ #endif /* PLANE3D_H_ */