Public Function AngleOffsetValue(ByRef pAngleSur As Double, ByRef pAngleDes As Double) As Double 'AngleOffsetValue函数 '格式: [tOutAngle] = AngleOffsetValue(pAngleSur, pAngleDes) '功能: 取得源点与目的点的角度 '参数: pAngleSur double 源角 ' pAngleDes double 目的角 '返回: tOutAngle double 目的角相对于源角的角度,范围0-90。 Dim tOutAngle As Double Dim tAngleAbs As Double Dim tAngleAdd As Integer tAngleAbs = pAngleDes - pAngleSur tAngleAdd = (((tAngleAbs > 270) And -360) Or ((tAngleAbs < -270) And 360)) tOutAngle = tAngleAbs + tAngleAdd AngleOffsetValue = tOutAngle End Function Public Function AngleGetByPoint(ByRef pSurX As Double, ByRef pSurY As Double, ByRef pDesX As Double, ByRef pDesY As Double) As Double 'AngleGetByPoint函数 '格式: [tOutAngle] = AngleGetByPoint(pSurX, pSurY, pDesX, pDesY) '功能: 取得源点与目的点的角度 '参数: pSurX double 源点X坐标 ' pSurY double 源点Y坐标 ' pDesX double 目的点Y坐标 ' pDesY double 目的点Y坐标 '返回: tOutAngle double 目的点相对于源点的角度,范围0-359。 Dim tOutAngle As Double Dim tOffsetX(1) As Double, tOffsetY(1) As Double Dim tQuad_Code As Byte, tQuad_Code_NoExt As Byte, tQuad_Code_Index As Byte Dim tAngle_Offset As Integer, tAngle_Offset_List() As Byte Dim tAngle_Multi As Integer, tAngle_Multi_List() As Byte Dim tAngle_Sur(1) As Double tOffsetY(0) = 1: tOffsetX(1) = pSurX - pDesX: tOffsetY(1) = pSurY - pDesY '象限编码器 tQuad_Code = (CBool(tOffsetX(1)) And 8) Or (CBool(tOffsetY(1)) And 4) Or ((tOffsetX(1) > 0) And 2) Or ((tOffsetY(1) > 0) And 1) tQuad_Code_NoExt = ((tQuad_Code And 12) = 12) And 1 tQuad_Code_Index = tQuad_Code * 2 '角偏移解码器 tAngle_Offset_List() = "4444644454746468" tAngle_Offset = (tAngle_Offset_List(tQuad_Code_Index) - 52) * 90 '角符号解码器 tAngle_Multi_List() = "1111111111110000" tAngle_Multi = (tAngle_Multi_List(tQuad_Code_Index) - 49) tAngle_Sur(1) = Atn(tOffsetX(tQuad_Code_NoExt) / tOffsetY(tQuad_Code_NoExt)) * 57.2957795130823 tOutAngle = tAngle_Sur(tQuad_Code_NoExt) * tAngle_Multi + tAngle_Offset AngleGetByPoint = tOutAngle End Function