已知半径和y坐标,求其夹角。
  Rad = 500 '
  DeltaY = 100 '
  Alfa = Atn(DeltaY / Rad)
通过画图后发现计算的夹角与计算的夹角有误差。
画图所得值为 0.201357920790331,计算所得值 0.197395559849881 
画图所测的角度值 11.5369590328155计算角度0.197395559849881 *180/Pi= 11.3099324740202 →与测量的角度有误差。请问:Atn的应用是否得当。问题在哪里。
谢谢。

解决方案 »

  1.   

    debug.Print Atn(1)*4
     3.14159265358979 
    Pi=Atn(1)*4
      

  2.   

    谢谢提醒,问题找到了
    用Atn(y/R)公式用错误了。没有计算x坐标,
    DeltaX = Sqr(Rad ^ 2 - DeltaY ^ 2)
    Atn(x/y)-------
    Sub ls1()
      Dim cPt(2) As Double, oArc As AcadArc, oLine As AcadLine
      Dim Rad As Double, Alfa1, Alfa2, DeltaX, DeltaY, Pi
      Pi = Atn(1) * 4
      Rad = 500
      DeltaY = 100
      DeltaX = Sqr(Rad ^ 2 - DeltaY ^ 2)
      Alfa1 = Atn(DeltaX / DeltaY)
      Debug.Print
      Alfa1 = Pi / 2 - Alfa1
      Alfa2 = Pi - Alfa1
      With ThisDrawing
        Set oArc = .HandleToObject("91")
        Set oLine = .HandleToObject("94")
        Debug.Print oLine.Angle, Alfa1
        Debug.Print oLine.Angle * 180 / Pi, Alfa1 * 180 / Pi
        With oArc
          .StartAngle = Alfa1
          .EndAngle = Alfa2
          .Radius = Rad
        End With
      End With
      

  3.   

    你那是正弦,要转为正切,然后才用反正切函数
        Dim d As Double
        Rad = 500 '
        DeltaY = 100
        d = DeltaY / Rad
        Debug.Print Atn(d / Sqr(-d * d + 1))
      

  4.   

    谢谢,目标实现。
    Sub ls1()
      Dim cPt(2) As Double, oArc As AcadArc, oLine As AcadLine
      Dim Rad As Double, Alfa1, Alfa2, Delta, DeltaY, Pi
      Pi = Atn(1) * 4
      Rad = 500
      DeltaY = 100
      Delta = DeltaY / Rad
      Alfa1 = Atn(Delta / Sqr(-Delta * Delta + 1))    
      Alfa2 = Pi - Alfa1
      With ThisDrawing
        Set oArc = .HandleToObject("91")
        Set oLine = .HandleToObject("94")
        Debug.Print oLine.Angle, Alfa1
        Debug.Print oLine.Angle * 180 / Pi, Alfa1 * 180 / Pi
        With oArc
          .StartAngle = Alfa1
          .EndAngle = Alfa2
          .Radius = Rad
        End With
      End With  
    End Sub