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; }
RNBoolean R3Contains(const R3Halfspace& halfspace, const R3Ray& ray) { // Return whether halfspace contains ray return (RNIsPositiveOrZero(halfspace.Normal().Dot(ray.Vector())) && R3Contains(halfspace, ray.Start())); }
RNBoolean R3Contains(const R3Halfspace& halfspace, const R3Point& point) { // Return whether halfspace contains point return (RNIsPositiveOrZero(R3SignedDistance(halfspace.Plane(), point))); }