コード例 #1
0
        /// <summary>
        /// 判断点是否在平面上
        /// </summary>
        /// <param name="x_vVector"></param>
        /// <param name="x_pPlaneCoefficient"></param>
        /// <param name="x_nPrecision"></param>
        /// <returns></returns>
        public static bool IsOnPlane(DataType.BasicDataType.vector x_vVector, DataType.BasicDataType.PlaneCoefficient x_pPlaneCoefficient, double x_nDistancePrecision)
        {
            bool l_bResult = false;
            //double l_nValue = x_pPlaneCoefficient.a * x_vVector.x + x_pPlaneCoefficient.b * x_vVector.y + x_pPlaneCoefficient.c * x_vVector.z + x_pPlaneCoefficient.d;
            //l_nValue = Math.Abs(l_nValue) / Math.Sqrt(Math.Pow(x_pPlaneCoefficient.a, 2) + Math.Pow(x_pPlaneCoefficient.b, 2) + Math.Pow(x_pPlaneCoefficient.c, 2));
            double l_nValue = PointToPlaneDistance(x_vVector, x_pPlaneCoefficient);

            if (l_nValue <= x_nDistancePrecision)
            {
                l_bResult = true;
            }
            else
            {
                l_bResult = false;
            }
            return(l_bResult);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="x_vVector"></param>
        /// <param name="x_pPlaneCoefficient"></param>
        /// <param name="x_nPrecision"></param>
        /// <returns></returns>
        //public static bool CKYIsOnPlane(DataType.BasicDataType.vector x_vVector, DataType.BasicDataType.PlaneCoefficient x_pPlaneCoefficient, double x_nPrecision)
        //{
        //    bool l_bResult = false;
        //    double l_nValue = x_pPlaneCoefficient.a * x_vVector.x + x_pPlaneCoefficient.b * x_vVector.y + x_pPlaneCoefficient.c * x_vVector.z + x_pPlaneCoefficient.d;
        //    if (l_nValue <= x_nPrecision)
        //    {
        //        l_bResult = true;
        //    }
        //    else
        //    {
        //        l_bResult = false;
        //    }
        //    return l_bResult;
        //}
        public static double PointToPlaneDistance(DataType.BasicDataType.vector x_vVector, DataType.BasicDataType.PlaneCoefficient x_pPlaneCoefficient)
        {
            double l_nValue1 = new double();
            double l_nValue2 = new double();

            l_nValue1 = x_pPlaneCoefficient.a * x_vVector.x + x_pPlaneCoefficient.b * x_vVector.y + x_pPlaneCoefficient.c * x_vVector.z + x_pPlaneCoefficient.d;
            l_nValue2 = Math.Abs(l_nValue1) / Math.Sqrt(Math.Pow(x_pPlaneCoefficient.a, 2) + Math.Pow(x_pPlaneCoefficient.b, 2) + Math.Pow(x_pPlaneCoefficient.c, 2));
            return(l_nValue2);
        }
コード例 #3
0
        //public static bool CKYIsOnCircle(DataType.StaubliRobotData.St_PointRx x_pPoint1, DataType.StaubliRobotData.St_PointRx x_pPoint2, DataType.StaubliRobotData.St_PointRx x_pPoint3, DataType.StaubliRobotData.St_PointRx x_pPoint4, double x_nLinePrecision, double x_nCirclePrecision,ref double x_nPreviousRadius,ref double x_nSubsequentRadius, ref double x_nActualError)
        //{
        //    bool l_bResult = false;
        //    DataType.BasicDataType.vector l_v1, l_v2, l_v3, l_v4;
        //    l_v1 = Point2Vector(x_pPoint1);
        //    l_v2 = Point2Vector(x_pPoint2);
        //    l_v3 = Point2Vector(x_pPoint3);
        //    l_v4 = Point2Vector(x_pPoint4);
        //    l_bResult = CKYIsOnCircle(l_v1, l_v2, l_v3, l_v4, x_nLinePrecision, x_nCirclePrecision,ref x_nPreviousRadius,ref x_nSubsequentRadius ,ref x_nActualError);
        //    return l_bResult;
        //}

        ///// <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_nPreviousRadius,ref double x_nSubsequentRadius ,ref double x_nActualError)
        //{
        //    bool l_bResult = false;
        //    DataType.BasicDataType.vector l_vCenterPoint1,l_vCenterPoint2;
        //    DataType.BasicDataType.PlaneCoefficient l_pCoefficient;
        //    double l_nRadius1,l_nRadius2;
        //    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_vCenterPoint1, out l_nRadius1);
        //            l_bResult = CreatCircle(x_vVector1, x_vVector2, x_vVector4, out l_vCenterPoint2, out l_nRadius2);
        //            if (l_bResult == true)
        //            {
        //                //double l_nActualError = BasicMathTool.VectorDistance(l_vCenterPoint1, l_vCenterPoint2);
        //                double l_nActualError = Math.Abs(l_nRadius1 - l_nRadius2);
        //                if (l_nActualError <= x_nCirclePrecision)
        //                {
        //                    l_bResult = true;
        //                    x_nActualError = l_nActualError;
        //                    x_nPreviousRadius = l_nRadius1;
        //                    x_nSubsequentRadius = l_nRadius2;
        //                }
        //                else
        //                {
        //                    l_bResult = false;
        //                }
        //            }
        //            else
        //            {
        //                l_bResult = false;
        //            }
        //        }
        //    }
        //    return l_bResult;
        //}

        /// <summary>
        /// 三点建立平面 test success
        /// </summary>
        /// <param name="x_vVector1"></param>
        /// <param name="x_vVector2"></param>
        /// <param name="x_vVector3"></param>
        /// <param name="x_pPlaneCoefficient"></param>
        /// <returns>false 三点共线
        /// </returns>true 成功
        public static bool CreatPlane(DataType.BasicDataType.vector x_vVector1, DataType.BasicDataType.vector x_vVector2, DataType.BasicDataType.vector x_vVector3, double x_nLinePrecision, out DataType.BasicDataType.PlaneCoefficient x_pPlaneCoefficient)
        {
            x_pPlaneCoefficient.a = 0;
            x_pPlaneCoefficient.b = 0;
            x_pPlaneCoefficient.c = 0;
            x_pPlaneCoefficient.d = 0;
            bool l_bResule = false;

            //l_bResule = ThreeColline(x_vVector1, x_vVector2, x_vVector3,x_nLinePrecision);
            l_bResule = ThreeColline(x_vVector1, x_vVector2, x_vVector3, 0.0000001);
            if (l_bResule == false)
            {
                DataType.BasicDataType.vector l_vVector1 = BasicMathTool.SubVector(x_vVector1, x_vVector2);
                DataType.BasicDataType.vector l_vVector2 = BasicMathTool.SubVector(x_vVector1, x_vVector3);
                DataType.BasicDataType.vector l_vVector3 = BasicMathTool.Vect3CrossPord(l_vVector1, l_vVector2);
                x_pPlaneCoefficient.a = l_vVector3.x;
                x_pPlaneCoefficient.b = l_vVector3.y;
                x_pPlaneCoefficient.c = l_vVector3.z;
                x_pPlaneCoefficient.d = -x_pPlaneCoefficient.a * x_vVector1.x - x_pPlaneCoefficient.b * x_vVector1.y - x_pPlaneCoefficient.c * x_vVector1.z;
                l_bResule             = true;
            }
            return(l_bResule);
        }