- 算法描述
2. 代码实现
/// <summary>
/// 判断线段ab与线段cd是否相交,如果相交返回ture
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="c"></param>
/// <param name="d"></param>
/// <returns></returns>
public static bool IsIntersection(Point a,Point b,Point c,Point d)
{
//AB = A + r(B-A), r 在[0,1]
//CD = C + t(D-C),s 在[0,1]
double r, s;
double deno = (b.X - a.X) * (d.Y - c.Y) - (b.Y - a.Y) * (d.X - c.X);
double mem1 = (a.Y - c.Y) * (d.X - c.X) - (a.X - c.X) * (d.Y - c.Y);
double mem2 = (a.Y - c.Y) * (b.X - a.X) - (a.X - c.X) * (b.Y - a.Y);
r = mem1 / deno;
s = mem2 / deno;
if (r > 1 || r < 0)
return false;
if (s > 1 || s < 0)
return false;
return true;
}
参考资料:地理信息系统算法基础_张宏p24-25