Sei sulla pagina 1di 3

Curva di Koch

Il seguente programma in Python (http://www.python.it/) visualizza le prime


approssimazioni della curva non rettificabile di Koch. Occorre avere installato
anche il pacchetto gnuplot.py (http://gnuplot-py.sourceforge.net/). Per visua-
lizzare la curva di Koch, si può usare anche un programma per l’esplorazione dei
frattali come xaos (http://wmi.math.u-szeged.hu/xaos/), oppure consultare la
pagina http://it.wikipedia.org/wiki/Curva di Koch.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
import math
import Gnuplot
import cmath

# Dato un lato, vi inserisce un nuovo triangolo


def insert(a):
i = complex(0,1)
b = []
b = b + [a[0]]
b = b + [a[0] + (a[1] - a[0]) / 3.]
m = (a[1] + a[0]) / 2.
l = (a[1] - a[0]) / 3.
n = (l * i) / abs(l)
b = b + [m + n * abs(l) * math.sin(cmath.pi / 3.)]
b = b + [a[0] + (a[1] - a[0]) / 3. * 2.]
b = b + [a[1]]
return b

# Trasforma una lista di numeri complessi


# in una lista di liste di due numeri reali: i punti
# nel piano che vengono poi usati da gnuplot per fare
# il grafico
def decomplex(b):
a = []
k = 0
while k < len(b):
a = a + [[b[k].real,b[k].imag]]
k = k + 1
return a

# inizializza il grafico e fissa la lunghezza


# degli assi e le proporzioni
g = Gnuplot.Gnuplot()
g(’set xrange [-0.1:1.1]’)
g(’set yrange [0:1.33]’)
g(’set size ratio 1.2/1.33’)

1
#
# per creare un file con il grafico
#
# g(’set terminal postscript eps’)
# g(’set output "Koch.eps"’)

# chiede l’approssimazione a cui fermarsi


while True:
n = input("Numero dell’approssimata da visualizzare: ")
if n < 1:
print "\nfornire un intero maggiore o uguale a 1\n"
break
# primo triangolo
b = [complex(0,1),complex(1,1),complex(0.5,0),complex(0,1)]
k = 0
n = n - 1
while k < n:
h = 0
a = []
# Inserisce nella lista i nuovi triangoli
# usando la funzione insert
while h < len(b)-1:
a = a + insert(b[h:h+2])[0:4]
h = h + 1
b = a + [complex(0,1)]
k = k + 1
# Calcola la lunghezza della curva
lunghezza = 3.*pow((4./3.),n)
# Scrive la lunghezza della curva come titolo nel grafico
Titolo = "Lunghezza=" + str(lunghezza)
g.title(Titolo)
# Disegna il grafico
g.plot(Gnuplot.Data(decomplex(b), with_="lines"))

2
Lunghezza=16.8559670782

1.2

0.8

0.6

0.4

0.2

0
0 0.2 0.4 0.6 0.8 1

Figura 0.1: Settima approssimata della curva di Koch