/// <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); }
//<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); }
/// <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); }