Line segment in two dimensions.
More...
#include <JSegment2D.hh>
Line segment in two dimensions.
Definition at line 36 of file JSegment2D.hh.
◆ JSegment2D() [1/2]
JGEOMETRY2D::JSegment2D::JSegment2D |
( |
| ) |
|
|
inline |
Default constructor.
Definition at line 43 of file JSegment2D.hh.
43 :
45 {}
std::pair< JPosition2D, JPosition2D > JSegment2D_t
Type definition of line segment in two dimensions.
◆ JSegment2D() [2/2]
Constructor.
- Parameters
-
A | start position |
B | end position |
Definition at line 54 of file JSegment2D.hh.
◆ getLengthSquared()
double JGEOMETRY2D::JSegment2D::getLengthSquared |
( |
| ) |
const |
|
inline |
Get length squared.
- Returns
- square of length
Definition at line 65 of file JSegment2D.hh.
66 {
67 return JVector2D(this->second - this->first).getLengthSquared();
68 }
◆ getLength()
double JGEOMETRY2D::JSegment2D::getLength |
( |
| ) |
const |
|
inline |
Get length.
- Returns
- length
Definition at line 76 of file JSegment2D.hh.
77 {
79 }
double getLengthSquared() const
Get length squared.
◆ intersects()
bool JGEOMETRY2D::JSegment2D::intersects |
( |
const JSegment2D & | segment | ) |
const |
|
inline |
Test whether two line segments intersect.
- Parameters
-
- Returns
- true if two line segment intersect; else false
Definition at line 88 of file JSegment2D.hh.
89 {
90 return (
getCCW(this->first, segment.first, this->second) !=
getCCW(this->first, segment.second, this->second) &&
91 getCCW(segment.first, this->first, segment.second) !=
getCCW(segment.first, this->second, segment.second));
92 }
bool getCCW(const T &a, const T &b, const T &c)
Check sequence of three points in X-Y plane.
◆ getIntersection()
Get intersection of two line segments.
- Parameters
-
- Returns
- intersection point
Definition at line 101 of file JSegment2D.hh.
102 {
103 JVector2D da(this->second - this->first);
104 JVector2D db(segment.second - segment.first);
105
107
108 if (gp != 0.0) {
109
112
113 db.sub(da);
114 db.div(gp);
115
116 return db;
117
118 } else {
119 throw JDivisionByZero("JSegment2D::getIntersection()");
120 }
121 }
double getPerpDot(const JFirst_t &first, const JSecond_t &second)
Get perpendicular dot product of objects.
◆ getDistanceSquared()
double JGEOMETRY2D::JSegment2D::getDistanceSquared |
( |
const JVector2D & | point | ) |
const |
|
inline |
Get squared of distance to point.
- Parameters
-
- Returns
- square of distance
Definition at line 130 of file JSegment2D.hh.
131 {
132 JVector2D D(this->second - this->first);
133
134 const double gp = D.getLengthSquared();
135
136 if (gp != 0.0) {
137
138 const JVector2D U(point - this->first);
139
140 double u = D.getDot(U);
141
142 if (u < 0.0)
143 u = 0.0;
144 else if (u > gp)
145 u = 1.0;
146 else
147 u /= gp;
148
149 D.mul(u);
150 D.sub(U);
151
152 return D.getLengthSquared();
153
154 } else {
155
156 return first.getDistanceSquared(point);
157 }
158 }
◆ getDistance()
double JGEOMETRY2D::JSegment2D::getDistance |
( |
const JVector2D & | point | ) |
const |
|
inline |
Get distance to point.
- Parameters
-
- Returns
- distance
Definition at line 167 of file JSegment2D.hh.
168 {
170 }
double getDistanceSquared(const JVector2D &point) const
Get squared of distance to point.
◆ getDot()
double JGEOMETRY2D::JSegment2D::getDot |
( |
const JSegment2D & | segment | ) |
const |
|
inline |
Get dot product.
- Parameters
-
- Returns
- dot product
Definition at line 179 of file JSegment2D.hh.
180 {
181 return JVector2D(this->second - this->first).getDot(segment.second - segment.first);
182 }
◆ operator>>
Read segment from input.
- Parameters
-
- Returns
- reader
Definition at line 192 of file JSegment2D.hh.
193 {
194 in >> segment.first;
195 in >> segment.second;
196
197 return in;
198 }
◆ operator<<
Write segment to output.
- Parameters
-
- Returns
- writer
Definition at line 208 of file JSegment2D.hh.
209 {
210 out << segment.first;
211 out << segment.second;
212
213 return out;
214 }
The documentation for this class was generated from the following file: