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

Από testwiki
Μετάβαση στην πλοήγηση Πήδηση στην αναζήτηση
Μια καμπύλη Γκόσπερ στο τέταρτο στάδιο
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°
  • Αξίωμα: A
  • Κανόνες αντικατάστασης:
    • AABB+A++AA+B
    • B+ABBBA++A+B

Σε αυτή την περίπτωση τόσο το Α όσο και το Β σημαίνουν ότι κινούμαστε προς τα εμπρός, το + σημαίνει ότι στρίβουμε αριστερά 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

Ένα πρόγραμμα σε γλώσσα προγραμματισμού 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] μπορεί να επικαλύψει την επιφάνεια. Στην πραγματικότητα, επτά αντίγραφα του νησιού Γκόσπερ μπορούν να ενωθούν για να σχηματίσουν ένα σχήμα που είναι ομοειδές, αλλά αναβαθμισμένο κατά έναν παράγοντα Πρότυπο:Radic σε όλες τις διαστάσεις. Όπως φαίνεται από το παρακάτω διάγραμμα, η εκτέλεση αυτής της πράξης με μια ενδιάμεση επανάληψη του νησιού οδηγεί σε μια αναβαθμισμένη έκδοση της επόμενης επανάληψης. Η επ' αόριστον επανάληψη αυτής της διαδικασίας παράγει μια ψηφιδωτή απεικόνιση του επιπέδου. Η ίδια η καμπύλη μπορεί ομοίως να επεκταθεί σε μια άπειρη καμπύλη που γεμίζει ολόκληρο το επίπεδο.[6]

Δείτε επίσης

Παραπομπές

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

Πρότυπο:Commonscat


Πρότυπο:Authority control Πρότυπο:Portal bar