写一段代码,实现的功能是已知起始点坐标和圆弧半径绘图,结果画出来的弧跟起始点之间有空隙,求指导。想要实现的功能就是连接两条线的端点,画出的图如下:
代码如下:
Dim Xc As Double '定义圆心坐标
Dim Yc As Double
Dim Rstart As Double '定义其实弧度
Dim Rend As Double '定义终点弧度
Dim pi As Double
pi = 3.1415926
Dim X as Double'定义左边点的坐标
Dim Y as Double
Dim Length as Double'定义的是两点之间的水平距离,也就确定了右边点的坐标
Xc = X + Length / 2
Yc = Y - Sqr(Radius * Radius - Length * Length / 4)
Rstart = pi / 2 - arcsin(Length / (2 * Radius))
Rend = pi / 2 + arcsin(Length / (2 * Radius))
Picture1.Circle (Xc, Yc), Radius, RGB(0, 0, 255), Rstart, Rend
 '定义反正弦函数
 Private Function arcsin(X) As Double
  Dim pi
  pi = 3.1415926
  If Abs(X) = 1 Then
   arcsin = pi / 2
  Else
   arcsin = Atn(X / Sqr(-X * X + 1))
  End If
 End Function

解决方案 »

  1.   

    '用像素坐标'
    Picture1.ScaleMode = vbPixels'π尽量用最多的位数'
    pi = 3.1415926535898'圆心在下面应该是加法'
    Yc = Y + Sqr(Radius * Radius - Length * Length / 4)
      

  2.   

    肯定是计算错了的。 
    很多年前刚学vb的时候做时钟练手,直接在Picturebox里画,遇到的问题比这多了,最后发现全都是数学计算的问题,一大堆cos sin的,数学底子薄啊,好在最后都解决了。
    楼主慢慢调
      

  3.   

    Dim Xc As Double '定义圆心坐标
    Dim Yc As Double
    Dim Rstart As Double '定义起点弧度
    Dim Rend As Double '定义终点弧度
    Dim pi As Double
    Dim X As Double '定义左边点的坐标
    Dim Y As Double
    Dim Length As Double '定义的是两点之间的水平距离,也就确定了右边点的坐标
     '定义反正弦函数
    Private Function arcsin(X As Double) As Double
      pi = 3.14159265
      If Abs(X) = 1 Then
       arcsin = pi / 2
      Else
       arcsin = Atn(X / Sqr(-X * X + 1))
      End If
    End FunctionPrivate Sub Command1_Click()
        pi = 3.14159265
        Picture1.ScaleMode = 3 'Pixel
        X = 100
        Y = 100
        Picture1.Circle (X, Y), 4, RGB(0, 0, 0)
        Length = 200
        Picture1.Circle (X + Length, Y), 4, RGB(0, 0, 0)
        Radius = Length / 2 + 10
        Xc = X + Length / 2
        Yc = Y - Sqr(Radius * Radius - Length * Length / 4)
        Rstart = 3 * pi / 2 - arcsin(Length / (2 * Radius))
        Rend = 3 * pi / 2 + arcsin(Length / (2 * Radius))
        Picture1.Circle (Xc, Yc), Radius, RGB(255, 0, 0)
        Picture1.Circle (Xc, Yc), Radius, RGB(0, 0, 255), Rstart, Rend
    End Sub