如题,最好有源程序.

解决方案 »

  1.   

    Const PI = 3.14159265359
    Const PI12 = PI / 12
    Const k = 0.2020305089104 'Sqr(2) / 7
    Const k1 = 1 / 7
    Const k2 = 2 / 7'Ellipse constants
    Const E_factor = 0.2761423749154Public Type POINTAPI
        X As Long
        Y As Long
    End TypePublic Function SineWavePts(x0 As Long, y0 As Long, scaleX As Long, scaleY As Long, Angle As Long) As POINTAPI()
        Dim p(24) As POINTAPI
        Dim Y(24) As Single, r As Single, alfa As Single
        Dim x1 As Single, y1 As Single
        
        'y(0) =0: y(12) = 0: y(24) = 0
        Y(1) = 2 * k - k1
        Y(2) = 4 * k - k2
        Y(3) = Sqr(2) / 2
        Y(4) = 3 * k + k2
        Y(5) = 1
        Y(6) = 1
        Y(7) = 1
        Y(8) = Y(4)
        Y(9) = Y(3)
        Y(10) = Y(2)
        Y(11) = Y(1)
        Y(13) = -Y(1)
        Y(14) = -Y(2)
        Y(15) = -Y(3)
        Y(16) = -Y(4)
        Y(17) = -1
        Y(18) = -1
        Y(19) = -1
        Y(20) = Y(16)
        Y(21) = Y(15)
        Y(22) = Y(14)
        Y(23) = Y(13)
        
        For i = 0 To 24
            x1 = scaleX * i * PI12
            y1 = scaleY * Y(i)
            r = Sqr(x1 ^ 2 + y1 ^ 2)
            alfa = Atn2(y1, x1) + Angle * PI / 180
            p(i).X = x0 + r * Cos(alfa)
            p(i).Y = y0 - r * Sin(alfa)
        Next i
        
        SineWavePts = pEnd Function
    Private Function Atn2(Y As Single, X As Single) As Single
        If X = 0 Then
            Atn2 = IIf(Y = 0, PI / 4, Sgn(Y) * PI / 2)
        Else
            Atn2 = Atn(Y / X) + (1 - Sgn(X)) * PI / 2
        End If
    End Function
    使用
    Private Declare Function PolyBezier Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As LongPrivate Sub mnuSine_Click()
        Dim Pts() As POINTAPI
        Dim i As Long
        Cls
        Ex = False    Pts = SineWavePts(W / 2, H / 2, 20, 20, i)
        ForeColor = RGB(240, 130, 0)
        PolyBezier Me.hdc, Pts(0), UBound(Pts) + 1    DoEvents
    End Sub
      

  2.   

    利用PolyBezier API详细请看msdn
      

  3.   

    const pi = 3.14159
    for x = -2*pi to 2*pi step 0.00001
    y = sin(x)
    fprm.fset (x,y)
    next x