Καμπύλη Γκόσπερ

Μια καμπύλη Γκόσπερ στο τέταρτο στάδιο
The line from the red to the green point shows a single step of the Gosper curve construction

Η καμπύλη Γκόσπερ, που πήρε το όνομά της από τον Μπιλ Γκόσπερ και είναι επίσης γνωστή ως καμπύλη Πέανο-Γκόσπερ[1], πρόκειται για μια καμπύλη που γεμίζει το χώρο και της οποίας το οριακό σύνολο είναι το rep-7[2]. Είναι μια καμπύλη φράκταλ που μοιάζει στην κατασκευή με την καμπύλη δράκου και την καμπύλη Χίλμπερτ.

Η καμπύλη Γκόσπερ μπορεί επίσης να χρησιμοποιηθεί για ιεραρχική εξαγωνική ομαδοποίηση και ευρετηρίαση[3].

Σύστημα Λιντενμάγιερ

[Επεξεργασία | επεξεργασία κώδικα]

Η καμπύλη Γκόσπερ μπορεί να αναπαρασταθεί χρησιμοποιώντας ένα L-σύστημα με κανόνες ως εξής:

  • Γωνία: 60°
  • Αξίωμα:
  • Κανόνες αντικατάστασης:

Σε αυτή την περίπτωση τόσο το Α όσο και το Β σημαίνουν ότι κινούμαστε προς τα εμπρός, το + σημαίνει ότι στρίβουμε αριστερά 60 μοίρες και το - σημαίνει ότι στρίβουμε δεξιά 60 μοίρες - χρησιμοποιώντας ένα πρόγραμμα τύπου "χελώνας" όπως η Γλώσσα προγραμματισμού 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, το οποίο χρησιμοποιεί τους προαναφερθέντες κανόνες του συστήματος 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]

  1. Weisstein, Eric W. «Peano-Gosper Curve». MathWorld. Ανακτήθηκε στις 31 Οκτωβρίου 2013. 
  2. «rep-tile definition - Wolfram|Alpha». www.wolframalpha.com (στα Αγγλικά). Ανακτήθηκε στις 26 Αυγούστου 2023. 
  3. 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:10.3390/sym11060731. 
  4. «turtle — Turtle graphics». Python documentation. Ανακτήθηκε στις 25 Αυγούστου 2023. 
  5. 5,0 5,1 Weisstein, Eric W. «Gosper Island». mathworld.wolfram.com (στα Αγγλικά). Ανακτήθηκε στις 26 Αυγούστου 2023. 
  6. «Fractals de Gosper». mathcurve.com. Ανακτήθηκε στις 26 Αυγούστου 2023. 

Εξωτερικοί σύνδεσμοι

[Επεξεργασία | επεξεργασία κώδικα]