Notki z roku 2002 i miesiaca numer 12


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.

image001


Kategorie: programowanie, _blog, programowanie / vba, programowanie / html


Słowa kluczowe: krzywe hilberta, vba, rekurencja


Pliki


Komentarze: (0)

Skomentuj notkę

Disclaimers :-) bo w stopce coś wyglądającego mądrze można napisać. Wszystkie powyższe notatki są moim © wymysłem i jako takie związane są ze mną. Ale są też materiały obce, które tu przechowuję lub cytuje ze względu na ich dobrą jakość, na inspiracje, bądź ilustracje prezentowanego lub omawianego tematu. Jeżeli coś narusza czyjeś prawa - proszę o sygnał abym mógł czym prędzej naprawić błąd i naruszeń zaniechać.