Η καμπύλη Γκόσπερ, που πήρε το όνομά της από τον Μπιλ Γκόσπερ και είναι επίσης γνωστή ως καμπύλη Πέανο-Γκόσπερ[1], πρόκειται για μια καμπύλη που γεμίζει το χώρο και της οποίας το οριακό σύνολο είναι το rep-7[2]. Είναι μια καμπύλη φράκταλ που μοιάζει στην κατασκευή με την καμπύλη δράκου και την καμπύλη Χίλμπερτ.
Η καμπύλη Γκόσπερ μπορεί επίσης να χρησιμοποιηθεί για ιεραρχική εξαγωνική ομαδοποίηση και ευρετηρίαση[3].
Η καμπύλη Γκόσπερ μπορεί να αναπαρασταθεί χρησιμοποιώντας ένα L-σύστημα με κανόνες ως εξής:
Σε αυτή την περίπτωση τόσο το Α όσο και το Β σημαίνουν ότι κινούμαστε προς τα εμπρός, το + σημαίνει ότι στρίβουμε αριστερά 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]