public V2d Intersect(V2d dirVector) { if (Origin.Abs().AllSmaller(Constant <double> .PositiveTinyValue)) { return(Origin); // Early exit when rays have same origin } double cross = Direction.Dot270(dirVector); if (!Fun.IsTiny(cross)) // Rays not parallel { return(Origin + Direction * dirVector.Dot270(Origin) / cross); } else // Rays are parallel { return(V2d.NaN); } }
public V2d Intersect(Ray2d r) { V2d a = r.Origin - Origin; if (a.Abs().AllSmaller(Constant <double> .PositiveTinyValue)) { return(Origin); // Early exit when rays have same origin } double cross = Direction.Dot270(r.Direction); if (!Fun.IsTiny(cross)) // Rays not parallel { return(Origin + Direction * r.Direction.Dot90(a) / cross); } else // Rays are parallel { return(V2d.NaN); } }