/// <summary> /// 判断线是否重合 /// </summary> /// <param name="crv1"></param> /// <param name="crv2"></param> /// <returns></returns> public static bool JudgeDuplicateCurves(Autodesk.DesignScript.Geometry.Curve crv1 , Autodesk.DesignScript.Geometry.Curve crv2) { Autodesk.DesignScript.Geometry.Point pt1 = crv1.StartPoint; Autodesk.DesignScript.Geometry.Point pt2 = crv1.EndPoint; bool b1 = JudgeDuplicatePoints(pt1, crv2.StartPoint) && JudgeDuplicatePoints(pt2, crv2.EndPoint); bool b2 = JudgeDuplicatePoints(pt1, crv2.EndPoint) && JudgeDuplicatePoints(pt2, crv2.StartPoint); bool b3 = crv1.TangentAtParameter(0.3).IsParallel(crv2.TangentAtParameter(0.3)) || crv1.TangentAtParameter(0.3).IsParallel(crv2.TangentAtParameter(0.7)); if ((b1 || b2) && b3) { return(true); } return(false); }
/// <summary> /// 判断两条曲线相等(通过两条曲线上的点来判断精确度越高判断越准确 /// </summary> /// <param name="curve"></param> /// <param name="curve2"></param> /// <param name="Accuracy"></param> /// <returns></returns> public static bool IsAlmostEqualsTo(this DyCurve curve, DyCurve curve2, int Accuracy = 100) { //判断从0到1的 分段点上 点相等 而且 所在点的切线平行 double accuracyPercent = -1; if (Accuracy == 0) { throw new Exception("wrong parameter"); } for (int i = 0; i <= Accuracy; i++) { accuracyPercent = i == 0?0:i / Accuracy; if (!curve.PointAtParameter(accuracyPercent).IsAlmostEqualTo(curve2.PointAtParameter(accuracyPercent)) || !curve.TangentAtParameter(accuracyPercent).IsParallel(curve2.TangentAtParameter(accuracyPercent)) ) { return(false); } } return(true); }