Als ausgewiesener Python-Fachmann falle ich schon in den ersten Zeilen ratlos auf die Nase
class CulturalDecay:
def __init__(self):
self.Distance = [[0] * 11 for i in range(11)]
for iX in range(11):
for iY in range(11):
if iX in [0, 1] and iY in [0, 1]:
self.Distance[iX][iY] = 1
else:
self.Distance[iX][iY] = int((iX**2 + iY**2)**0.5 + (0.5**2 + 0.5**2)**0.5)
self.Distance = [[0] * 11 for i in range(11)]
verblüfft mich. Das erste Element der Liste wird mit 11 multipliziert? Das müsste aber doch immer i=0 sein, oder nicht? Mithin wäre der Initialwert für self.Distance = 0?
self.Distance[iX][iY] = int((iX**2 + iY**2)**0.5 + (0.5**2 + 0.5**2)**0.5)
damit komme ich überhaupt nicht mehr klar.
(iX**2 + iY**2)**0.5
müsste Wurzel(ix²+ix²) liefern?
Da für i(x,y)= 0;1 fest der Wert 1 gesetzt wird, müssen wir nun einfach für den nächsten Wert prüfen, und stellen fest, daß der Ausdruck Wurzel(2²+2²) liefert. Das ist Wurzel(8) == 2,828427125
(0.5**2 + 0.5**2)**0.5
müsste doch eigentlich immer den konstanten Wert (0,25 + 0,25)**0,5 liefern, also Wurzel aus 0,5 == 0,707106781
Damit kann das doch als konstanter Ausdruck definiert werden, ohne daß das Programm drei Exponentialfunktionen durchlaufen muß?
Wenn man sich beide Teilausdrücke im Zusammenhang ansieht, stellt man fest, daß für iX und iY > 1 der kleinste Wert des Gesamtausdrucks
int(2,828427125 + 0,707106781) == 3 ergibt.
Wir haben also für einen Sprung von 1 auf 3 zwischen i=1 und i=2.
self.Distance[iX][iY] müsste dann self.Distance[3][3] sein?
ja, ich gebe zu, ich bin eine Wurst....