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