157 const double _epsilon = 1e-6)
const
162 if (std::abs(p43.
X()) < _epsilon && std::abs(p43.
Y()) < _epsilon &&
163 std::abs(p43.
Z()) < _epsilon)
170 if (std::abs(p21.
X()) < _epsilon && std::abs(p21.
Y()) < _epsilon &&
171 std::abs(p21.
Z()) < _epsilon)
176 double d1343 = p13.
Dot(p43);
177 double d4321 = p43.
Dot(p21);
178 double d1321 = p13.
Dot(p21);
179 double d4343 = p43.
Dot(p43);
180 double d2121 = p21.
Dot(p21);
182 double denom = d2121 * d4343 - d4321 * d4321;
186 if (std::abs(denom) < _epsilon)
188 double d1 = this->pts[0].Distance(_line[0]);
189 double d2 = this->pts[0].Distance(_line[1]);
191 double d3 = this->pts[1].Distance(_line[0]);
192 double d4 = this->pts[1].Distance(_line[1]);
194 if (d1 <= d2 && d1 <= d3 && d1 <= d4)
196 _result.
SetA(this->pts[0]);
197 _result.
SetB(_line[0]);
199 else if (d2 <= d3 && d2 <= d4)
201 _result.
SetA(this->pts[0]);
202 _result.
SetB(_line[1]);
206 _result.
SetA(this->pts[1]);
207 _result.
SetB(_line[0]);
211 _result.
SetA(this->pts[1]);
212 _result.
SetB(_line[1]);
218 double numer = d1343 * d4321 - d1321 * d4343;
220 double mua =
clamp(numer / denom, 0.0, 1.0);
221 double mub =
clamp((d1343 + d4321 * mua) / d4343, 0.0, 1.0);
223 _result.
Set(this->pts[0] + (p21 * mua), _line[0] + (p43 * mub));
304 double _epsilon = 1e-6)
const
307 if (this->Parallel(_line, _epsilon))
310 if (this->Within(_line[0], _epsilon))
316 else if (this->Within(_line[1], _epsilon))
328 this->Distance(_line, distLine, _epsilon);
332 if (distLine.
Length() < _epsilon)
348 double _epsilon = 1e-6)
const
350 return _pt.
X() <=
std::max(this->pts[0].X(),
351 this->pts[1].X()) + _epsilon &&
353 this->pts[1].X()) - _epsilon &&
355 this->pts[1].Y()) + _epsilon &&
357 this->pts[1].Y()) - _epsilon &&
359 this->pts[1].Z()) + _epsilon &&
361 this->pts[1].Z()) - _epsilon;