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

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

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

## Αλγόριθμος

### Σύστημα Λιντενμάγιερ
Η καμπύλη Γκόσπερ μπορεί να αναπαρασταθεί χρησιμοποιώντας ένα L-σύστημα με κανόνες ως εξής:
* Γωνία: 60°
* Αξίωμα: A
* Κανόνες αντικατάστασης:
** A \mapsto A-B--B+A++AA+B-
** B \mapsto +A-BB--B-A++A+B
Σε αυτή την περίπτωση τόσο το Α όσο και το Β σημαίνουν ότι κινούμαστε προς τα εμπρός, το + σημαίνει ότι στρίβουμε αριστερά 60 μοίρες και το - σημαίνει ότι στρίβουμε δεξιά 60 μοίρες - χρησιμοποιώντας ένα πρόγραμμα τύπου "χελώνας" όπως η Γλώσσα προγραμματισμού Logo.

### Logo
Ένα πρόγραμμα Logo για τη σχεδίαση της καμπύλης Γκόσπερ με τη χρήση turtle graphics:

```logos
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 έκδοση):


```python
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)
```


## Ιδιότητες
Ο χώρος που γεμίζει η καμπύλη ονομάζεται **νησί Γκόσπερ**. Οι πρώτες επαναλήψεις του φαίνονται παρακάτω:

Το νησί Γκόσπερ μπορεί να επικαλύψει την επιφάνεια. Στην πραγματικότητα, επτά αντίγραφα του νησιού Γκόσπερ μπορούν να ενωθούν για να σχηματίσουν ένα σχήμα που είναι ομοειδές, αλλά αναβαθμισμένο κατά έναν παράγοντα  σε όλες τις διαστάσεις. Όπως φαίνεται από το παρακάτω διάγραμμα, η εκτέλεση αυτής της πράξης με μια ενδιάμεση επανάληψη του νησιού οδηγεί σε μια αναβαθμισμένη έκδοση της επόμενης επανάληψης. Η επ' αόριστον επανάληψη αυτής της διαδικασίας παράγει μια ψηφιδωτή απεικόνιση του επιπέδου. Η ίδια η καμπύλη μπορεί ομοίως να επεκταθεί σε μια άπειρη καμπύλη που γεμίζει ολόκληρο το επίπεδο.

## Δείτε επίσης
*Σύνολο Μάντελμπροτ
*Μαουρίτς Κορνέλις Έσερ
*Οικοδομήσιμο Σύμπαν

## Παραπομπές


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

*NEW GOSPER SPACE FILLING CURVES
*FRACTAL DE GOSPER 
*Gosper Island at Wolfram MathWorld
*Flowsnake by R. William Gosper

 
 

Κατηγορία:Φράκταλ
Κατηγορία:Μαθηματική λογική
Κατηγορία:Καμπύλες