注册 登录
编程论坛 VB6论坛

曲线计数问题

lvguidong123 发布于 2012-11-09 14:46, 289 次点击
我想实现正弦波的波峰波谷计数,可是只是在波谷那计数,而且每次增加2个数,比如k显示的是0,2,4…。我想让它经过波谷加1,进过波峰再加1,怎么实现啊?还请各位高手多多指教。
代码如下:
For t = 2 To 749
If py(t - 1) < py(t) And py(t - 2) > py(t - 1) Then
k = k + 1
ElseIf py(t - 1) > py(t) And py(t - 2) < py(t - 1) Then
k = k + 1
End If
Next t
Text2.Text = k
3 回复
#2
yz10252012-11-09 23:51
py(t)是正弦波的公式吧,有公式就等于事先知道波峰波谷的Y值各是多少,
那X轴是2...749,把X值带入公式就得出这段Y值有几个了不是,等于有几次波峰波谷?
是这样吗?还是还有类比和数位之间的问题?离开学校很久了.
#3
lvguidong1232012-11-10 08:48
回复 2楼 yz1025
我是想让它每出一个波峰或波谷记一次数,不是要计它的总数。
#4
yz10252012-11-10 10:47
以下是引用lvguidong123在2012-11-10 08:48:19的发言:

我是想让它每出一个波峰或波谷记一次数,不是要计它的总数。


其实我不大懂,只是从代码来分析。所以你是要即时计算?
那就不能用FOR循环,要改用DO While...Loop循环,外加一个bool值去终止撷取,
因为你定了2...749,感觉是事后计算总数,既然波峰波谷是固定值,
频率也是固定值,那次数不就也是固定值,就只是看你要撷取的范围?

直觉猜想到代码应该会长这样,
你自己再去把这和你的波形图关连起来...
程序代码:

Dim t As Integer
Dim nStop As Boolean

Private Sub Command1_Click()
    nStop = False
    Do While (nStop = False)
        Call AAA(nStop)
    Loop
End Sub

Private Sub AAA(nStop As Boolean)

    If (t Mod 2 = 0) And (t > 1) Then
        If (py(t) = 波峰或波谷) Then
            Text1.Text = CStr(Val(Text1.Text) + 1)
        End If
    End If
    DoEvents
    t = IIf(t < 750, t + 2, 0)'t范围你自定
    Debug.Print t

End Sub

Private Function py(X As Integer) As Integer
    '.....
End Function

Private Sub Command2_Click()
    nStop = True
End Sub

Private Sub Command3_Click()
    t = 0: Text1.Text = CStr(t)
End Sub

Private Sub Form_Load()
    t = 0
    Command1.Caption = "Start"
    Command2.Caption = "Stop"
    Command3.Caption = "Clear"
    Text1.Text = CStr(t)
End Sub
1