Bezier.bas
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:2k
源码类别:

midi

开发平台:

Unix_Linux

  1. Attribute VB_Name = "Bezier"
  2. Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  3. 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
  4. Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  5. 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
  6. Public Const SRCCOPY = &HCC0020
  7. Global imgDC As Long
  8. Type pts
  9.     x As Single
  10.     y As Single
  11. End Type
  12. Global ft(30) As Single
  13. Global Pt(30) As pts
  14. Global MaxPt As Long
  15. Sub bezier_draw(nb As Long, OffX As Long, OffY As Long)
  16. Dim i As Long, pas As Single, t As Single, oldx As Single, oldy As Single, x As Single, y As Single
  17. pas = 1 / nb
  18. Call ini_factorielles
  19. oldx = Pt(0).x
  20. oldy = Pt(0).y
  21. For t = pas To 1 Step pas
  22.     x = bezier_ptx(t)
  23.     y = bezier_pty(t)
  24.     ppal.Line (OffX + oldx, OffY + oldy)-(OffX + x, OffY + y), QBColor(ppal.Color.Value)
  25.     oldx = x
  26.     oldy = y
  27. Next t
  28. For i = 0 To MaxPt
  29.     ppal.PSet (OffX + Pt(i).x, OffY + Pt(i).y), QBColor(ppal.Color.Value)
  30. Next i
  31. End Sub
  32. Function bezier_pty(t As Single) As Single
  33. Dim k As Long, i As Long
  34. k = 0
  35. For i = 0 To MaxPt
  36.     bezier_pty = bezier_pty + Pt(i).y * melange(k, MaxPt, t)
  37.     k = k + 1
  38. Next i
  39. End Function
  40. Function bezier_ptx(t As Single) As Single
  41. Dim k As Long, i As Long
  42. k = 0
  43. For i = 0 To MaxPt
  44.     bezier_ptx = bezier_ptx + Pt(i).x * melange(k, MaxPt, t)
  45.     k = k + 1
  46. Next i
  47. End Function
  48. Sub ini_factorielles()
  49. ft(0) = 1
  50. For i& = 1 To 30
  51.     ft(i&) = ft(i& - 1) * i&
  52. Next i&
  53. End Sub
  54. Sub make_pt(i As Long, x As Long, y As Long)
  55. Pt(i).x = x
  56. Pt(i).y = y
  57. End Sub
  58. Function melange(i As Long, n As Long, t As Single) As Single
  59. melange = CSng(ft(n) / ft(i) / ft(n - i)) * t ^ i * (1 - t) ^ (n - i)
  60. End Function