14.6 Linear Component to Rectangle 659
return 0;
}
}
// The line and rectangle are not parallel and the line
// does not intersect the rectangle. Or the line and
// triangle are rectangle. The order of visitation is
// left edge, right edge, bottom edge, top edge.
float sqrDistance = infinity;
Segment seg;
for (i1 = 0; i1 < 2; i1++)
{
for (i0 = 0; i0 < 2; i0++)
{
seg.P = rectangle.C +
(2 * i0 - 1) * rectangle.e[i1] * rectangle.D[i1];
seg.D = rectangle.D[1-i1];
seg.e = rectangle.e[1-i1];
float tmpLT, tmpST;
float tmpSD = SquaredDistance(line,seg,tmpLT,tmpST);
if (tmpSD < sqrDistance)
{
sqrDistance = tmpSD;
tClosest = tmpT;
float sb1 = -tmpST/seg.e;
sClosest[0] = rectangle.e[0] * ((1 - i1) * (2 * i0 - 1)
+ i1 * sb1);
sClosest[1] = rectangle.e[1] * ((1 - i0) * (2 * i1 ...