Exemple #1
0
        /// <summary>
        ///  判断点是否在圆上(CKY标准,点到圆弧最近距离)
        /// </summary>
        /// <returns></returns>
        public static bool CKYIsOnCircle(DataType.BasicDataType.vector x_vVector1, DataType.BasicDataType.vector x_vVector2, DataType.BasicDataType.vector x_vVector3, DataType.BasicDataType.vector x_vVector4, double x_nLinePrecision, double x_nCirclePrecision, ref double x_nActualError)
        {
            bool l_bResult = false;

            DataType.BasicDataType.vector           l_vCenterPoint;
            DataType.BasicDataType.PlaneCoefficient l_pCoefficient;
            double l_nRadius;

            l_bResult = CreatPlane(x_vVector1, x_vVector2, x_vVector3, x_nLinePrecision, out l_pCoefficient);
            if (l_bResult == true)
            {
                l_bResult = IsOnPlane(x_vVector4, l_pCoefficient, x_nCirclePrecision);
                if (l_bResult == true)
                {
                    l_bResult = CreatCircle(x_vVector1, x_vVector2, x_vVector3, out l_vCenterPoint, out l_nRadius);
                    double l_nDistance             = BasicMathTool.VectorDistance(l_vCenterPoint, x_vVector4);
                    double l_nPointToPlaneDistance = PointToPlaneDistance(x_vVector4, l_pCoefficient);
                    double l_nActualError          = Math.Sqrt(Math.Pow(l_nDistance - l_nRadius, 2) + Math.Pow(l_nPointToPlaneDistance, 2));
                    if (l_nActualError <= x_nCirclePrecision)
                    //if (Math.Abs(l_nDistance - l_nRadius) <= x_nPrecision)
                    {
                        l_bResult      = true;
                        x_nActualError = l_nActualError;
                    }
                    else
                    {
                        l_bResult = false;
                    }
                }
            }
            return(l_bResult);
        }
Exemple #2
0
        //<summary>
        //判断三点共线(第三点到直线的距离作为精度【相关技术要求】)
        //</summary>
        //<returns>true:共线</returns>false:不共线
        public static bool CKYThreeColline(DataType.StaubliRobotData.St_PointRx x_pPoint1, DataType.StaubliRobotData.St_PointRx x_pPoint2, DataType.StaubliRobotData.St_PointRx x_pPoint3, double x_nDistancePrecision, ref double x_nActualError)
        {
            bool l_bResult = false;

            DataType.BasicDataType.vector l_V1, l_V2, l_V3;
            l_V1 = Point2Vector(x_pPoint1);
            l_V2 = Point2Vector(x_pPoint2);
            l_V3 = Point2Vector(x_pPoint3);
            double l_nDistance1 = BasicMathTool.VectorDistance(l_V1, l_V2);
            double l_nDistance2 = BasicMathTool.VectorDistance(l_V1, l_V3);

            if (l_nDistance1 <= l_nDistance2)
            {
                double l_nDiastance = PointToLineDistance(l_V1, l_V2, l_V3);
                if (l_nDiastance <= x_nDistancePrecision)
                {
                    l_bResult = true; x_nActualError = l_nDiastance;
                }
                else
                {
                    l_bResult = false;
                }
            }
            else
            {
                l_bResult = false;
            }
            return(l_bResult);
        }
Exemple #3
0
        /// <summary>
        ///  判断点是否在圆上
        /// </summary>
        /// <returns></returns>
        public static bool IsOnCircle(DataType.BasicDataType.vector x_vVector1, DataType.BasicDataType.vector x_vVector2, DataType.BasicDataType.vector x_vVector3, DataType.BasicDataType.vector x_vVector4, double x_nLinePrecision, double x_nPrecision)
        {
            bool l_bResult = false;

            DataType.BasicDataType.vector           l_vCenterPoint;
            DataType.BasicDataType.PlaneCoefficient l_pCoefficient;
            double l_nRadius;

            l_bResult = CreatPlane(x_vVector1, x_vVector2, x_vVector3, x_nLinePrecision, out l_pCoefficient);
            if (l_bResult == true)
            {
                l_bResult = IsOnPlane(x_vVector4, l_pCoefficient, x_nPrecision);
                if (l_bResult == true)
                {
                    l_bResult = CreatCircle(x_vVector1, x_vVector2, x_vVector3, out l_vCenterPoint, out l_nRadius);
                    double l_nDistance = BasicMathTool.VectorDistance(l_vCenterPoint, x_vVector4);
                    if (Math.Abs(l_nDistance - l_nRadius) <= x_nPrecision)
                    {
                        l_bResult = true;
                    }
                    else
                    {
                        l_bResult = false;
                    }
                }
            }
            return(l_bResult);
        }