11 #include <Eigen/Geometry>
49 class Line3D :
protected Eigen::ParametrizedLine<double, 3> {
55 const Eigen::Vector3d& p1) {
56 return {p0, (p1 - p0).normalized()};
76 Line3D(
const Eigen::Vector3d& origin,
const Eigen::Vector3d& direction);
84 const Eigen::Vector3d&
Origin()
const {
return m_origin; }
87 const Eigen::Vector3d&
Direction()
const {
return m_direction; }
92 return std::numeric_limits<double>::infinity();
96 virtual void Transform(
const Eigen::Transform<double, 3, Eigen::Affine>& t);
100 const Eigen::ParametrizedLine<double, 3>&
Line()
const {
return *
this; }
107 const Eigen::Hyperplane<double, 3>& plane)
const;
130 virtual Eigen::Vector3d
Projection(
const Eigen::Vector3d& point)
const;
190 const Line3D& other)
const;
213 Line3D(
const Eigen::Vector3d& origin,
214 const Eigen::Vector3d& direction,
244 static Ray3D Through(
const Eigen::Vector3d& p0,
const Eigen::Vector3d& p1) {
245 return {p0, (p1 - p0).normalized()};
249 Ray3D(
const Eigen::Vector3d& origin,
const Eigen::Vector3d& direction);
254 return std::numeric_limits<double>::infinity();
263 const Eigen::Hyperplane<double, 3>& plane)
const override;
294 return std::max(parameter, 0.);
302 return parameter >= 0;
326 const Eigen::Vector3d& p1) {
332 Segment3D(
const Eigen::Vector3d& start_point,
333 const Eigen::Vector3d& end_point);
337 explicit Segment3D(
const std::pair<Eigen::Vector3d, Eigen::Vector3d>& pair);
341 double Length()
const override {
return length_; }
344 Eigen::Vector3d
MidPoint()
const {
return 0.5 * (origin() + end_point_); }
347 const Eigen::Vector3d&
EndPoint()
const {
return end_point_; }
351 const Eigen::Transform<double, 3, Eigen::Affine>& t)
override;
362 const Eigen::Hyperplane<double, 3>& plane)
const override;
417 return std::max(std::min(parameter, length_), 0.);
425 return parameter >= 0 && parameter <= length_;
429 Eigen::Vector3d end_point_;
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:159
Line3D is a class which derives from Eigen::ParametrizedLine<double, 3> in order to capture the seman...
Definition: Line3D.h:49
const Eigen::ParametrizedLine< double, 3 > & Line() const
Returns a const reference to the underlying Eigen::ParametrizedLine object.
Definition: Line3D.h:100
virtual ~Line3D()=default
virtual void Transform(const Eigen::Transform< double, 3, Eigen::Affine > &t)
Transform the Line3D by the given matrix.
Definition: Line3D.cpp:36
virtual double ClampParameter(double parameter) const
Clamps/bounds a parameter value to the closest valid place where the entity exists....
Definition: Line3D.h:202
const Eigen::Vector3d & Direction() const
Gets the line's direction vector.
Definition: Line3D.h:87
LineType
Specifies different semantic interpretations of 3d lines.
Definition: Line3D.h:62
@ Line
Lines extend infinitely in both directions.
std::pair< double, double > SlabAABBBase(const AxisAlignedBoundingBox &box) const
Calculates the common t_min and t_max values of the slab AABB intersection method....
Definition: Line3D.cpp:40
Line3D(const Eigen::Vector3d &origin, const Eigen::Vector3d &direction)
Default user constructor.
Definition: Line3D.cpp:17
const Eigen::Vector3d & Origin() const
Gets the line's origin point.
Definition: Line3D.h:84
virtual utility::optional< double > SlabAABB(const AxisAlignedBoundingBox &box) const
Returns the lower intersection parameter for a line with an axis aligned bounding box or empty if no ...
Definition: Line3D.cpp:136
std::pair< Eigen::Vector3d, Eigen::Vector3d > ClosestPoints(const Line3D &other) const
Computes the two closest points between this Line3D object and the other, including of derived types ...
Definition: Line3D.cpp:260
double ProjectionParameter(const Eigen::Vector3d &point) const
Calculates the parameter of a point projected onto the line taking into account special semantics.
Definition: Line3D.cpp:167
std::pair< double, double > ClosestParameters(const Line3D &other) const
Computes the two corresponding parameters of the closest distance between two Line3D objects,...
Definition: Line3D.cpp:171
LineType GetLineType() const
Gets the semantic type of the line.
Definition: Line3D.h:81
virtual double Length() const
Gets the length of the line, which for lines and rays will return positive infinity,...
Definition: Line3D.h:91
virtual Eigen::Vector3d Projection(const Eigen::Vector3d &point) const
Calculates a point projected onto the line, taking into account special semantics.
Definition: Line3D.cpp:163
virtual utility::optional< double > ExactAABB(const AxisAlignedBoundingBox &box) const
Returns the lower intersection parameter for a line with an axis aligned bounding box or empty if no ...
Definition: Line3D.cpp:72
virtual bool IsParameterValid(double parameter) const
Verifies that a given parameter value is valid for the semantics of the line object....
Definition: Line3D.h:208
double DistanceTo(const Line3D &other) const
Gets the closest distance between two Line3D objects, including derived types Ray3D and Segment3D,...
Definition: Line3D.cpp:270
virtual utility::optional< double > IntersectionParameter(const Eigen::Hyperplane< double, 3 > &plane) const
Calculates the intersection parameter between the line and a plane taking into account line semantics...
Definition: Line3D.cpp:153
static Line3D Through(const Eigen::Vector3d &p0, const Eigen::Vector3d &p1)
Creates a line through two points. The line origin will take the value of p0, and the line direction ...
Definition: Line3D.h:54
A ray is a semantic interpretation of Eigen::ParametrizedLine which has an origin and a direction and...
Definition: Line3D.h:240
double Length() const override
Gets the length of the line, which for lines and rays will return positive infinity,...
Definition: Line3D.h:253
double ClampParameter(double parameter) const override
Clamps/bounds a parameter value to the closest valid place where the entity exists....
Definition: Line3D.h:293
utility::optional< double > SlabAABB(const AxisAlignedBoundingBox &box) const override
Returns the lower intersection parameter for a ray with an axis aligned bounding box or empty if no i...
Definition: Line3D.cpp:284
static Ray3D Through(const Eigen::Vector3d &p0, const Eigen::Vector3d &p1)
Creates a Ray3D through two points. The ray origin will take the value of p0, and the direction will ...
Definition: Line3D.h:244
bool IsParameterValid(double parameter) const override
Verifies that a given parameter value is valid for the semantics of the line object....
Definition: Line3D.h:301
utility::optional< double > IntersectionParameter(const Eigen::Hyperplane< double, 3 > &plane) const override
Calculates the intersection parameter between the line and a plane taking into account ray semantics....
Definition: Line3D.cpp:305
Ray3D(const Eigen::Vector3d &origin, const Eigen::Vector3d &direction)
Default constructor, requires point and direction.
Definition: Line3D.cpp:281
A segment is a semantic interpretation of Eigen::ParametrizedLine which has an origin and an endpoint...
Definition: Line3D.h:320
utility::optional< double > IntersectionParameter(const Eigen::Hyperplane< double, 3 > &plane) const override
Calculates the intersection parameter between the line and a plane taking into account segment semant...
Definition: Line3D.cpp:379
static Segment3D Through(const Eigen::Vector3d &p0, const Eigen::Vector3d &p1)
Creates a Segment3D through two points. The origin will take the value of p0, and the endpoint be p1....
Definition: Line3D.h:325
double ClampParameter(double parameter) const override
Clamps/bounds a parameter value to the closest valid place where the entity exists....
Definition: Line3D.h:416
const Eigen::Vector3d & EndPoint() const
Get the end point of the segment.
Definition: Line3D.h:347
utility::optional< double > SlabAABB(const AxisAlignedBoundingBox &box) const override
Returns the lower intersection parameter for a segment with an axis aligned bounding box or empty if ...
Definition: Line3D.cpp:335
void Transform(const Eigen::Transform< double, 3, Eigen::Affine > &t) override
Transform the segment by the given matrix.
Definition: Line3D.cpp:330
utility::optional< double > ExactAABB(const AxisAlignedBoundingBox &box) const override
Returns the lower intersection parameter for a segment with an axis aligned bounding box or empty if ...
Definition: Line3D.cpp:358
Eigen::Vector3d MidPoint() const
Calculates the midpoint of the segment.
Definition: Line3D.h:344
double Length() const override
Get the scalar length of the segment as the distance between the start point (origin) and the end poi...
Definition: Line3D.h:341
Segment3D(const Eigen::Vector3d &start_point, const Eigen::Vector3d &end_point)
Default constructor for Segment3D takes the start and end points of the segment start_point end_point...
Definition: Line3D.cpp:319
bool IsParameterValid(double parameter) const override
Verifies that a given parameter value is valid for the semantics of the line object....
Definition: Line3D.h:424
AxisAlignedBoundingBox GetBoundingBox() const
Get an axis-aligned bounding box representing the enclosed volume of the line segment.
Definition: Line3D.cpp:368
Definition: Optional.h:259
Definition: PinholeCameraIntrinsic.cpp:16