如题,最好有源程序.
解决方案 »
- 如何使用vb读取位图并生产灰度并生成直方图
- sql日期查询的困惑!!!!
- Sendmessage 发送什么消息让一个窗体不可见(Visible=false)?
- 关于 distinct 的使用问题。
- 求教!用vb如何实现打印一文本文件 (在线等)
- 关于datagrid的几个问题(选中整行,定位单元格,选中矩形区域)
- 放分贴(1),多谢flxa帮助,其他人不用进来
- textbox.enabled=False 后 .forecolor无效,显示总是灰的,怎样让有颜色?
- 使用 VB 编程,如何让“左右键同时按”与“中键”等价?
- 如何检测ADO中是否存在活动事务?
- 扫描控件imgscan,imgeidt,imganntool等 如何使用
- 用MSComm控件,当设置PortOpen=True时,怎么知道指定串口上是否已连接有设备。
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
for x = -2*pi to 2*pi step 0.00001
y = sin(x)
fprm.fset (x,y)
next x