Alles anzeigenSo, und nochmal eine funktionierende Beschleunigung, allerdings zu Lasten der Bildqualität. Diesmal baue ich zu Anfang eine Wertetabelle mit 512 Einträgen, die den Bereich von 0 bis 2pi abdeckt - alles was außerhalb des Bereichs liegt, kann darauf zurückgerechnet werden ((Wert*512)/(2*pi))AND511.
Hinzufügte Variablen:
cv(512) - Array für Zwischenwerte
cf - Umrechnungsfaktor Winkelfunktion -> Array (2pi/512)
ct - Temporäre Variable beim Befüllen des Arrays
by - Wert 511 (für AND-Verknüpfung)Zur Initialisierung wird in Zeile 10 das Unterprogramm ab Zeile 100 aufgerufen. Dort wird die Wertetabelle befüllt und die FNC-Funktion definiert (DEF FNC(x)...). Die FNC-Funktion wird dann in der Hauptfunktion (Zeile 21) statt der COS-Funktion verwendet.
Code100 fort=0to128 130 ct=cos(t*cf) 140 cv(t)=ct 150 cv(512-t)=ct 160 cv(256-t)=-ct 170 cv(256+t)=-ct 180 next 190 def fnc(x)=cv((n5+x/cf)andby) 200 returnErgebnis: 18:28 (statt ursprünglich >50 Minuten)
Wenn n5 aus Zeile 190 rausgenommen wird, ist's knapp über 18 Minuten (allerdings mit etwas ausgefransteren Kurven). Durch Auflösen der FNC-Aufrufe in der Hauptfunktion (f=fnc(r)-fnc(3*r)/3...) lässt sich sicherlich die Zeit noch auf unter 18 Minuten drücken. Ich hab' jetzt aber erst mal genug von Hüten
[..]
Diese Wertebereichsumrechnung von von 512 <-> 2*PI macht da den Tabellenvorteil irgendwie zunichte. Ich hätte mir da mehr Potential in dieser Optimierung versprochen. Das gesamte Mapping (schon "r") könnte sich da an 0-511 orientieren ...