判断两线段是否相交的C#代码
2011-11-25 20:43
274 查看
今晚参考了 http://www.html-js.com/?p=1066&cpage=1 写了判断两线段是否相交的c#代码。基本思想是相交的两条线段,对于任意一线段的两端点,都在另一条直线的两边。
/// <summary> /// 判断直线2的两点是否在直线1的两边。 /// </summary> /// <param name="line1">直线1</param> /// <param name="line2">直线2</param> /// <returns></returns> private bool CheckCrose(Line line1, Line line2) { PointF v1 = new PointF(); PointF v2 = new PointF(); PointF v3 = new PointF(); v1.X = line2.Start.X - line1.End.X; v1.Y = line2.Start.Y - line1.End.Y; v2.X = line2.End.X - line1.End.X; v2.Y = line2.End.Y - line1.End.Y; v3.X = line1.Start.X - line1.End.X; v3.Y = line1.Start.Y - line1.End.Y; return (CrossMul(v1, v3) * CrossMul(v2, v3) <= 0); } /// <summary> /// 判断两条线段是否相交。 /// </summary> /// <param name="line1">线段1</param> /// <param name="line2">线段2</param> /// <returns>相交返回真,否则返回假。</returns> private bool CheckTwoLineCrose(Line line1, Line line2) { return CheckCrose(line1, line2) && CheckCrose(line2, line1); } /// <summary> /// 计算两个向量的叉乘。 /// </summary> /// <param name="pt1"></param> /// <param name="pt2"></param> /// <returns></returns> private float CrossMul(PointF pt1, PointF pt2) { return pt1.X * pt2.Y - pt1.Y * pt2.X; }
相关文章推荐
- c#判断两线段是否相交
- C#判断线段是否相交
- c# 判断两条线段是否相交(判断地图多边形是否相交)
- Pick-up sticks(判断线段是否相交)
- 判断两线段是否相交
- 判断两条线段是否相交
- PKU1410:判断线段是否跟矩形相交
- 【算法导论】33.2:判断任意两条线段是否相交
- poj 1039 Pipe (判断 直线和 线段 是否相交 并 求交点)
- 判断两线段是否相交
- hdu 1558 Segment set(并查集+判断线段是否相交)
- 判断两线段是否相交
- NYOJ 1016 判断两线段是否相交
- 判断线段与圆是否相交
- 判断两线段是否相交(快速排斥和跨立)
- POJ 1410 Intersection(判断线段与矩形是否相交)
- poj 1410 Intersection(判断线段是否与实心矩形相交)
- 判断线段和矩形是否相交
- zoj 1648 判断线段是否相交
- poj 3304 判断是否存在一条直线与所有线段相交