⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bezier.bas

📁 video linux conference
💻 BAS
字号:
Attribute VB_Name = "Bezier"
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Const SRCCOPY = &HCC0020

Global imgDC As Long

Type pts
    x As Single
    y As Single
End Type
Global ft(30) As Single
Global Pt(30) As pts
Global MaxPt As Long

Sub bezier_draw(nb As Long, OffX As Long, OffY As Long)
Dim i As Long, pas As Single, t As Single, oldx As Single, oldy As Single, x As Single, y As Single

pas = 1 / nb
Call ini_factorielles
oldx = Pt(0).x
oldy = Pt(0).y

For t = pas To 1 Step pas
    x = bezier_ptx(t)
    y = bezier_pty(t)
    ppal.Line (OffX + oldx, OffY + oldy)-(OffX + x, OffY + y), QBColor(ppal.Color.Value)
    oldx = x
    oldy = y
Next t
For i = 0 To MaxPt
    ppal.PSet (OffX + Pt(i).x, OffY + Pt(i).y), QBColor(ppal.Color.Value)
Next i

End Sub

Function bezier_pty(t As Single) As Single
Dim k As Long, i As Long
k = 0
For i = 0 To MaxPt
    bezier_pty = bezier_pty + Pt(i).y * melange(k, MaxPt, t)
    k = k + 1
Next i

End Function
Function bezier_ptx(t As Single) As Single
Dim k As Long, i As Long
k = 0
For i = 0 To MaxPt
    bezier_ptx = bezier_ptx + Pt(i).x * melange(k, MaxPt, t)
    k = k + 1
Next i

End Function

Sub ini_factorielles()
ft(0) = 1
For i& = 1 To 30
    ft(i&) = ft(i& - 1) * i&
Next i&

End Sub

Sub make_pt(i As Long, x As Long, y As Long)
Pt(i).x = x
Pt(i).y = y

End Sub

Function melange(i As Long, n As Long, t As Single) As Single
melange = CSng(ft(n) / ft(i) / ft(n - i)) * t ^ i * (1 - t) ^ (n - i)

End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -