public static bool Overlap(LineF line, RectangleF rect) { line.Setup(); float tmin, tmax, tymin, tymax; if (line._dx >= 0) { tmin = (rect.X - line.Start.X) * line._idx; tmax = (rect.X + rect.Width - line.Start.X) * line._idx; } else { tmin = (rect.X + rect.Width - line.Start.X) * line._idx; tmax = (rect.X - line.Start.X) * line._idx; } if (line._dy >= 0) { tymin = (rect.Y - line.Start.Y) * line._idy; tymax = (rect.Y + rect.Height - line.Start.Y) * line._idy; } else { tymin = (rect.Y + rect.Height - line.Start.Y) * line._idy; tymax = (rect.Y - line.Start.Y) * line._idy; } return !((tmin > tymax) || (tymin > tmax)); }
public static bool Overlap(LineF line, RectangleF rect) { line.Setup(); float tmin, tmax, tymin, tymax; if (line._dx >= 0) { tmin = (rect.X - line.Start.X) * line._idx; tmax = (rect.X + rect.Width - line.Start.X) * line._idx; } else { tmin = (rect.X + rect.Width - line.Start.X) * line._idx; tmax = (rect.X - line.Start.X) * line._idx; } if (line._dy >= 0) { tymin = (rect.Y - line.Start.Y) * line._idy; tymax = (rect.Y + rect.Height - line.Start.Y) * line._idy; } else { tymin = (rect.Y + rect.Height - line.Start.Y) * line._idy; tymax = (rect.Y - line.Start.Y) * line._idy; } return(!((tmin > tymax) || (tymin > tmax))); }
public static bool Overlap(LineF a, LineF b) { a.Setup(); b.Setup(); float s1 = b._dx * (a.Start.Y - b.Start.Y) - b._dy * (a.Start.X - b.Start.X); float s2 = a._dx * (a.Start.Y - b.Start.Y) - a._dy * (a.Start.X - b.Start.X); float d = 1 / (b._dy * a._dx - a._dy * b._dx); float u1 = s1 * d; float u2 = s2 * d; return 0 <= u1 && u1 <= 1 && 0 <= u2 && u2 <= 1; }
public static bool Overlap(LineF a, LineF b) { a.Setup(); b.Setup(); float s1 = b._dx * (a.Start.Y - b.Start.Y) - b._dy * (a.Start.X - b.Start.X); float s2 = a._dx * (a.Start.Y - b.Start.Y) - a._dy * (a.Start.X - b.Start.X); float d = 1 / (b._dy * a._dx - a._dy * b._dx); float u1 = s1 * d; float u2 = s2 * d; return(0 <= u1 && u1 <= 1 && 0 <= u2 && u2 <= 1); }