Beispiel #1
0
void R2Vector::
Mirror(const R2Line& line)
{
  // Mirror vector across line
  double d = Dot(line.Normal());
  *this += line.Normal() * (-2.0 * d);
}
Beispiel #2
0
void R2Point::
Mirror(const R2Line& line)
{
    // Mirror point across line
    double d = R2SignedDistance(*this, line);
    *this += line.Normal() * (-2.0 * d);
}
Beispiel #3
0
RNLength R2SignedDistance(const R2Line& line, const R2Box& box)
{
    // Return signed distance from line to box
    RNQuadrant quadrant = line.Normal().Quadrant();
    RNScalar d1 = R2SignedDistance(line, box.Corner(~quadrant & 0x3));
    if (RNIsPositiveOrZero(d1)) return d1;
    RNScalar d2 = R2SignedDistance(line, box.Corner(quadrant));
    if (RNIsNegative(d2)) return d2;
    else return 0.0;
}