21 grudnia 2002 (sobota), 11:11:11
Krzywe Hilberta
Pewien grudnowie nocy 2002 roku zachciało mi się przypomnieć rekurencję i krzywe Hilberta ładnie namalować. Ale był problem. Na komputerze domowym nie miałem żadnego kompilatora, żadnego języka który grafikę potrafiłby malować. Napewno? Był Word a w nim VBA, który szybko opanowałem. I powstało takie coś.
Kilka lat później wyksportowałem to Wordem do HTMLa, czyli zrobił się jakiś GIF, ale też kod, którego dziś pewnie żadna przeglądarka nie ruszy. Ale zachowuję ku pamięci.
Rem
Rem Krzywe Hilberta wg. algorytmu Niklausa Wirth'a
Rem zawartego w książce "Algorytmy + struktury danych = programy"
Rem w chwili radości (21 grudnia 2002) z Pascala na VBA przetłumaczył Wojtek34
Rem
Dim XX, YY As Double
Dim x, y As Double
Dim h As Double
Dim grubość As Double
Sub Hilbert()
N = 5: h0 = 600
InicjujPisanie
i = 0: h = h0: x0 = h / 2: y0 = x0
Do
i = i + 1: h = h / 2
x0 = x0 + h / 2: y0 = y0 + h / 2
x = x0: y = y0: UstawPióro 4 / i
A (i)
Loop Until i = N
End Sub
Private Sub InicjujPisanie()
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1 ' kasuj też wszystko z dokumentu !
x = 0: y = 0
End Sub
Private Sub UstawPióro(grubość1)
XX = x: YY = y
grubość = grubość1
End Sub
Private Sub Kreśl()
ActiveDocument.Shapes.AddLine(XX, YY, x, y).Select
Selection.ShapeRange.Line.Weight = grubość
Selection.EndKey ' to służy temu, aby na ekranie pojawiło się to co się namalowało
XX = x: YY = y
End Sub
Private Sub A(i As Integer)
If i > o Then
D i - 1: x = x - h: Kreśl
A i - 1: y = y - h: Kreśl
A i - 1: x = x + h: Kreśl
B i - 1
End If
End Sub
Private Sub B(i As Integer)
If i > o Then
C i - 1: y = y + h: Kreśl
B i - 1: x = x + h: Kreśl
B i - 1: y = y - h: Kreśl
A i - 1
End If
End Sub
Private Sub C(i As Integer)
If i > o Then
B i - 1: x = x + h: Kreśl
C i - 1: y = y + h: Kreśl
C i - 1: x = x - h: Kreśl
D i - 1
End If
End Sub
Private Sub D(i As Integer)
If i > o Then
A i - 1: y = y - h: Kreśl
D i - 1: x = x - h: Kreśl
D i - 1: y = y + h: Kreśl
C i - 1
End If
End Sub
A oto efekt działania tego kodu na kartce A4 w Wordzie.