21 Сентябрь 2011

Кривая Коха — как правильно построить рекурсию

Арифметика |  Таги: ,

Кривая Коха — как правильно построить рекурсию

Option Explicit
Dim L, h, xstart, ystart, xend, yend As Double
Dim level As Integer

Private Sub scaling(xstart, ystart, xend, yend)
Picture1.Scale (-xstart, xstart)-(xstart, -xstart)
Picture1.DrawWidth = 2
End Sub

Private Sub Command1_Click()
xstart = -10: ystart = 0: xend = 10: yend = 0: level = Val(Text1.Text)
If level < = 0 Or level > 10 Then
    MsgBox "Глибина інтерацій має бути в межах від 0 до 10! Повторіть введения...", vbInformation, "ERROR"
    Text1.Text = ""
    Exit Sub
End If
Picture1.Cls
scaling xstart, ystart, xend, yend
KokhCurve xstart, ystart, xend, yend, level
End Sub

Private Sub KokhCurve(xstart, ystart, xend, yend, level)
    Dim L, h, sina, cosa, x1, y1, x2, y2, x3, y3 As Double

    If level = 1 Then
        Picture1.Line (xstart, ystart)-(xend, yend), RGB(0, 255, 0)
    Else
        L = Sqr((xend - xstart) * (xend - xstart) + (yend - ystart) * (yend - ystart))
        h = L / (2 * Sqr(3))
        sina = (yend - ystart) / L
        cosa = (xend - xstart) / L
        x1 = xstart + (xend - xstart) / 3
        x2 = (xstart + xend) / 2 + h * sina
        x3 = xstart + 2 * (xend - xstart) / 3
        y1 = ystart + (yend - ystart) / 3
        y2 = (ystart + yend) / 2 - h * cosa
        y3 = ystart + 2 * (yend - ystart) / 3

        KokhCurve xstart, ystart, x1, y1, level - 1
        KokhCurve x1, y1, x2, y2, level - 1
        KokhCurve x2, y2, x3, y3, level - 1
        KokhCurve x3, y3, xend, yend, level - 1
    End If

End Sub


Оставить комментарий

Я не робот.