35 template<
class Po
int,
class Po
intRef>
43 template<
class Po
int,
class Po
intRef>
55 is.
check(
"line::line(Istream& is)");
61 template<
class Po
int,
class Po
intRef>
67 template<
class Po
int,
class Po
intRef>
74 template<
class Po
int,
class Po
intRef>
81 template<
class Po
int,
class Po
intRef>
88 template<
class Po
int,
class Po
intRef>
95 template<
class Po
int,
class Po
intRef>
124 template<
class Po
int,
class Po
intRef>
133 Point a(end() - start());
135 Point c(edge.
start() - start());
137 Point crossab = a ^
b;
138 scalar magCrossSqr =
magSqr(crossab);
140 if (magCrossSqr > VSMALL)
142 scalar s = ((c ^
b) & crossab)/magCrossSqr;
143 scalar t = ((c ^ a) & crossab)/magCrossSqr;
146 if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
149 thisPt = start() + a*s;
150 edgePt = edge.
start() + b*t;
165 scalar edgeDist =
min(edge0.distance(), edge1.distance());
167 if (thisDist < edgeDist)
172 edgePt = edge.
start();
182 if (edge0.distance() < edge1.distance())
185 edgePt = edge0.rawPoint();
190 edgePt = edge1.rawPoint();
200 scalar edge0 = edge.
start() & a;
201 scalar edge1 = edge.
end() & a;
202 bool edgeOrder = edge0 < edge1;
204 scalar minEdge = (edgeOrder ? edge0 : edge1);
205 scalar maxEdge = (edgeOrder ? edge1 : edge0);
206 const Point& minEdgePt = (edgeOrder ? edge.
start() : edge.
end());
207 const Point& maxEdgePt = (edgeOrder ? edge.
end() : edge.
start());
209 scalar this0 = start() & a;
210 scalar this1 = end() & a;
211 bool thisOrder = this0 < this1;
213 scalar minThis =
min(this0, this1);
214 scalar maxThis =
max(this1, this0);
215 const Point& minThisPt = (thisOrder ? start() : end());
216 const Point& maxThisPt = (thisOrder ? end() : start());
218 if (maxEdge < minThis)
224 else if (maxEdge < maxThis)
228 thisPt = nearestDist(edgePt).rawPoint();
233 if (minEdge < minThis)
240 else if (minEdge < maxThis)
244 thisPt = nearestDist(edgePt).rawPoint();
261 template<
class Po
int,
class Po
intRef>
273 is.
check(
"Istream& operator>>(Istream&, line&)");
279 template<
class Po
int,
class Po
intRef>
280 inline Ostream& operator<<(Ostream& os, const line<Point, PointRef>& l)