/// <summary> /// 二维平面内直线的交点,如果没有交点,则返回 null /// </summary> /// <returns>如果两直线平行或者近似平行,以至找不到交点,则返回 null </returns> public XY GetIntersectPointWith(Line2D line2) { // 先判断两条直线是否平行 if (Direction.IsCollinearWith(line2.Direction)) { return(null); } else { return(GetIntersectPoint(k, b, line2.k, line2.b)); } }
/// <summary> /// 两个指向器在平面上是否能够相交,如果能,则返回其交点坐标;如果两射线平行,则不能相交,此时返回 null /// </summary> /// <param name="ray2">用来判断相交的另一条射线</param> /// <returns></returns> public XY IntersectWith(Ray2D ray2) { // 先判断两条射线所对应的无限长的直线在二维平面中的交点 if (Direction.IsCollinearWith(ray2.Direction)) { // 平行向量不可能相交 return(null); } // 两直线的交点 XY intersectPoint = null; intersectPoint = Line.GetIntersectPointWith(ray2.Line); if (intersectPoint == null) { return(null); } // 再判断这两条射线的起止范围是否包含了此交点 return((Contains(intersectPoint) && ray2.Contains(intersectPoint)) ? intersectPoint : null); }