public static bool RayPlaneIntersection(out float t, Ray ray, Plane plane) { float dot = Vector3.Dot(ray.Dir, plane.Normal); if (System.Math.Abs(dot) < JiggleMath.Epsilon) { t = 0.0f; return false; } float dist = Distance.PointPlaneDistance(ray.Origin, plane); t = -dist / dot; return (t >= 0.0f); }
public static bool LinePlaneIntersection(out float t, Line line, Plane plane) { float dot = Vector3.Dot(line.Dir, plane.Normal); if (System.Math.Abs(dot) < JiggleMath.Epsilon) { t = 0.0f; return false; } float dist = Distance.PointPlaneDistance(line.Origin,plane); t = -dist / dot; return true; }
public Plane GetInverse() { Plane plane = new Plane(this.normal, this.d); plane.Invert(); return plane; }
public static bool SegmentPlaneIntersection(out float tS, Segment seg, Plane plane) { float denom = Vector3.Dot(plane.Normal, seg.Delta); if (System.Math.Abs(denom) > JiggleMath.Epsilon) { float t = -(Vector3.Dot(plane.Normal, seg.Origin) + plane.D) / denom; if (t < 0.0f || t > 1.0f) { tS = 0.0f; return false; } tS = t; return true; } else { // parallel - return false even if it's in the plane tS = 0.0f; return false; } }
public override Primitive Clone() { Plane newPlane = new Plane(this.Normal, this.D); newPlane.Transform = Transform; return newPlane; }