Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }