Καμπύλη Γκόσπερ
Η καμπύλη Γκόσπερ, που πήρε το όνομά της από τον Μπιλ Γκόσπερ και είναι επίσης γνωστή ως καμπύλη Πέανο-Γκόσπερ[1], πρόκειται για μια καμπύλη που γεμίζει το χώρο και της οποίας το οριακό σύνολο είναι το rep-7[2]. Είναι μια καμπύλη φράκταλ που μοιάζει στην κατασκευή με την καμπύλη δράκου και την καμπύλη Χίλμπερτ.
Η καμπύλη Γκόσπερ μπορεί επίσης να χρησιμοποιηθεί για ιεραρχική εξαγωνική ομαδοποίηση και ευρετηρίαση[3].
Αλγόριθμος
[Επεξεργασία | επεξεργασία κώδικα]Σύστημα Λιντενμάγιερ
[Επεξεργασία | επεξεργασία κώδικα]Η καμπύλη Γκόσπερ μπορεί να αναπαρασταθεί χρησιμοποιώντας ένα L-σύστημα με κανόνες ως εξής:
- Γωνία: 60°
- Αξίωμα:
- Κανόνες αντικατάστασης:
Σε αυτή την περίπτωση τόσο το Α όσο και το Β σημαίνουν ότι κινούμαστε προς τα εμπρός, το + σημαίνει ότι στρίβουμε αριστερά 60 μοίρες και το - σημαίνει ότι στρίβουμε δεξιά 60 μοίρες - χρησιμοποιώντας ένα πρόγραμμα τύπου "χελώνας" όπως η Γλώσσα προγραμματισμού Logo.
Logo
[Επεξεργασία | επεξεργασία κώδικα]Ένα πρόγραμμα Logo για τη σχεδίαση της καμπύλης Γκόσπερ με τη χρήση turtle graphics[4]:
to rg :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [rg :st :ln rt 60 gl :st :ln rt 120 gl :st :ln lt 60 rg :st :ln lt 120 rg :st :ln rg :st :ln lt 60 gl :st :ln rt 60]
if :st = 0 [fd :ln rt 60 fd :ln rt 120 fd :ln lt 60 fd :ln lt 120 fd :ln fd :ln lt 60 fd :ln rt 60]
end
to gl :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [lt 60 rg :st :ln rt 60 gl :st :ln gl :st :ln rt 120 gl :st :ln rt 60 rg :st :ln lt 120 rg :st :ln lt 60 gl :st :ln]
if :st = 0 [lt 60 fd :ln rt 60 fd :ln fd :ln rt 120 fd :ln rt 60 fd :ln lt 120 fd :ln lt 60 fd :ln]
end
Το πρόγραμμα μπορεί να ενεργοποιηθεί, για παράδειγμα, με την εντολή rg 4 300
, ή εναλλακτικά gl 4 300
.
Python
[Επεξεργασία | επεξεργασία κώδικα]Ένα πρόγραμμα σε γλώσσα προγραμματισμού Python, το οποίο χρησιμοποιεί τους προαναφερθέντες κανόνες του συστήματος L, για να σχεδιάσει την καμπύλη Γκόσπερ χρησιμοποιώντας γραφικά χελώνας (online έκδοση):
import turtle
def gosper_curve(order: int, size: int, is_A: bool = True) -> None:
"""Draw the Gosper curve."""
if order == 0:
turtle.forward(size)
return
for op in "A-B--B+A++AA+B-" if is_A else "+A-BB--B-A++A+B":
gosper_op_map[op](order - 1, size)
gosper_op_map = {
"A": lambda o, size: gosper_curve(o, size, True),
"B": lambda o, size: gosper_curve(o, size, False),
"-": lambda o, size: turtle.right(60),
"+": lambda o, size: turtle.left(60),
}
size = 10
order = 3
gosper_curve(order, size)
Ιδιότητες
[Επεξεργασία | επεξεργασία κώδικα]Ο χώρος που γεμίζει η καμπύλη ονομάζεται νησί Γκόσπερ[5]. Οι πρώτες επαναλήψεις του φαίνονται παρακάτω:
Το νησί Γκόσπερ[5] μπορεί να επικαλύψει την επιφάνεια. Στην πραγματικότητα, επτά αντίγραφα του νησιού Γκόσπερ μπορούν να ενωθούν για να σχηματίσουν ένα σχήμα που είναι ομοειδές, αλλά αναβαθμισμένο κατά έναν παράγοντα √7 σε όλες τις διαστάσεις. Όπως φαίνεται από το παρακάτω διάγραμμα, η εκτέλεση αυτής της πράξης με μια ενδιάμεση επανάληψη του νησιού οδηγεί σε μια αναβαθμισμένη έκδοση της επόμενης επανάληψης. Η επ' αόριστον επανάληψη αυτής της διαδικασίας παράγει μια ψηφιδωτή απεικόνιση του επιπέδου. Η ίδια η καμπύλη μπορεί ομοίως να επεκταθεί σε μια άπειρη καμπύλη που γεμίζει ολόκληρο το επίπεδο.[6]
Δείτε επίσης
[Επεξεργασία | επεξεργασία κώδικα]Παραπομπές
[Επεξεργασία | επεξεργασία κώδικα]- ↑ Weisstein, Eric W. «Peano-Gosper Curve». MathWorld. Ανακτήθηκε στις 31 Οκτωβρίου 2013.
- ↑ «rep-tile definition - Wolfram|Alpha». www.wolframalpha.com (στα Αγγλικά). Ανακτήθηκε στις 26 Αυγούστου 2023.
- ↑ Uher, Vojtěch; Gajdoš, Petr; Snášel, Václav; Lai, Yu-Chi; Radecký, Michal (28 May 2019). «Hierarchical Hexagonal Clustering and Indexing». Symmetry 11 (6): 731. doi: .
- ↑ «turtle — Turtle graphics». Python documentation. Ανακτήθηκε στις 25 Αυγούστου 2023.
- ↑ 5,0 5,1 Weisstein, Eric W. «Gosper Island». mathworld.wolfram.com (στα Αγγλικά). Ανακτήθηκε στις 26 Αυγούστου 2023.
- ↑ «Fractals de Gosper». mathcurve.com. Ανακτήθηκε στις 26 Αυγούστου 2023.
Εξωτερικοί σύνδεσμοι
[Επεξεργασία | επεξεργασία κώδικα]- NEW GOSPER SPACE FILLING CURVES
- FRACTAL DE GOSPER (Γαλλικά)
- Gosper Island at Wolfram MathWorld
- Flowsnake by R. William Gosper