void R2Vector:: Mirror(const R2Line& line) { // Mirror vector across line double d = Dot(line.Normal()); *this += line.Normal() * (-2.0 * d); }
void R2Point:: Mirror(const R2Line& line) { // Mirror point across line double d = R2SignedDistance(*this, line); *this += line.Normal() * (-2.0 * d); }
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; }