Program Listing for File linesegment2d.hpp

Return to documentation for file (include/tuw_geometry/linesegment2d.hpp)

#ifndef TUW_GEOMETRY__LINESEGMENT2D_HPP
#define TUW_GEOMETRY__LINESEGMENT2D_HPP

#include "tuw_geometry/line2d.hpp"

namespace tuw
{

class LineSegment2D;
using LineSegment2DPtr = std::shared_ptr<LineSegment2D>;
using LineSegment2DConstPtr = std::shared_ptr<LineSegment2D const>;

class LineSegment2D : public Line2D
{
protected:
  Point2D p0_, p1_;

public:
  LineSegment2D();
  LineSegment2D(const LineSegment2D & l);
  LineSegment2D(const Point2D & p0, const Point2D & p1);
  LineSegment2D(const double & x0, const double & y0, const double & x1, const double & y1);
  const double & x0() const;
  const double & y0() const;
  const double & x1() const;
  const double & y1() const;
  double angle() const;
  const Point2D & p0() const;
  const Point2D & p1() const;
  Point2D pc() const;
  const Line2D & line() const;
  double length() const;
  bool operator==(const LineSegment2D & o) const;
  LineSegment2D & set(const double & x0, const double & y0, const double & x1, const double & y1);
  LineSegment2D & set(const Point2D & p0, const Point2D & p1);
  double distanceTo(const Point2D & p, double & dx, double & dy) const;
  double distanceSqrTo(const Point2D & p, double & dx, double & dy) const;

  double closestPointLineSegmentRatio(const Point2D & p) const;
  Point2D closestPointTo(const Point2D & p) const;
  double distanceTo(const Point2D & p) const;
  friend std::ostream & operator<<(std::ostream & os, const LineSegment2D & o)
  {
    os << "[[" << o.x0() << ", " << o.y0() << "], [" << o.x1() << ", " << o.y1() << "] ]";
    return os;
  }
};
using LineSegments2D = std::vector<LineSegment2D>;
using LineSegments2DPtr = std::shared_ptr<LineSegments2D>;
using LineSegments2DConstPtr = std::shared_ptr<LineSegments2D const>;
}  // namespace tuw
#endif  // TUW_GEOMETRY__LINESEGMENT2D_HPP