Der Hut verleitet zum Experimentieren - ich habe jetzt die Berechnungen als nächstes Optimierungsziel entdeckt:
(restlicher Code)
8 yl=200:n1=-1:n5=.5:z=0:nh=900:eh=100:hs=160:sf=56:vz=14:e=1
(restlicher Code)
19 fory=30to-30stepn1:xp=int(z4*sqr(nh-y*y)+n5)
20 forx=-xptoxp:xr=x/sf:yr=y/vz:r=sqr(xr*xr+yr*yr)
(restlicher Code)
Mal etwas umstellen:
r=sqr(xr*xr+yr*yr)
r=sqr((x/sf)*(x/sf)+(y/vz)*(y/vz))
r=sqr((x*x)/(sf*sf))+(y*y)/(vz*vz))
sf und vz sind Konstanten, die nur an dieser Stelle verwendet werden, so dass vz*vz und sf*sf schon vorher berechnet werden kann. Eine weitere Abkürzung: die Teilberechnung y*y findet sich auch in Zeile 19 wieder. xr und yr entfallen ersatzlos. Die geänderten Codezeilen lauten dann:
(restlicher Code)
6 dimbi(7),li(24),ad,yq
(restlicher Code)
8 yl=200:n1=-1:n5=.5:z=0:nh=900:eh=100:hs=160:sf=3136:vz=196:e=1
(restlicher Code)
19 fory=30to-30stepn1:yq=y*y:xp=int(4*sqr(nh-yq)+n5)
20 forx=-xptoxp:r=sqr(x*x/sf+yq/vz)
(restlicher Code)
Ergebnis: statt 53:17 jetzt 52:01. Mit weiteren Optimierungen (Streichen von z1 bis z9, Arraydefinition nach hinten schieben) lande ich bei 51:09 und der Code sieht wie folgt aus:
1 rem 2015-08-23 j@klasek.at
2 rem optimiert, nachgefeilt 2015-10-01 tale-x
3 rem nach run/stop mit goto27 zum textmodus
4 ti$="000000":dimf%(8000):clr
5 dimxp,yp,r,fl,xr,yr,x,y
6 dimad,yq
7 m7=504:e4=40
8 yl=200:n1=-1:n5=.5:z=0:nh=900:eh=100:hs=160:sf=56*56:vz=14*14
9 dimmi(319),ma(319),bi(7),li(24)
11 s=1:fort=0to7:bi(7-t)=s:s=s+s:next
12 a=8192:fort=0to24:li(t)=a:a=a+320:next
13 :
15 forx=0to319:mi(x)=yl:ma(x)=n1:next
16 poke53265,59:poke53272,24:poke53280,2
18 a=97:fort=1024to2023:poket,a:next
19 fory=30to-30stepn1:yq=y*y:xp=int(4*sqr(nh-yq)+n5)
20 forx=-xptoxp:r=sqr(x*x/sf+yq/vz)
21 f=cos(r)-cos(3*r)/3+cos(5*r)/5-cos(7*r)/7
22 fl=z:xp=hs+x-y:yp=eh+2*y-int(e4*f+n5)
23 ifmi(xp)>ypthenmi(xp)=yp:fl=1
24 ifma(xp)<ypthenma(xp)=yp:fl=1
25 ifflandyp>=zandyp<ylthengosub29
26 next:next:poke53280,3
27 forq=n1toz:geta$:q=a$=" ":next:sys58648:printti$:end
28 :end
29 ad=li(yp/8)+(xpandm7)+(ypand7):pokead,peek(ad)orbi(xpand7):return
30 :
31 rem ** c64 hat written 2015-08-20 by michael kircher
Alles anzeigen
Dauer org 56:23
Dauer neu 51:10
->5:10 Minuten Ersparnis (9%)Ist doch schon mal was, oder?
Okay, nicht berauschend, also weiterschauen:
Die einzelnen Kurven sind axialsymmetrisch (Kosinus ftw!) und gehen immer von -x bis +x - warum berechnen wir dann die Werte doppelt? Also mal fix das Programm umgestrickt, dass wir gleichzeitig von links und rechts zeichnen (rechts ab Zeile 26), dann reicht bei x auch der halbe Wertebereich:
1 rem 2015-08-23 j@klasek.at
2 rem optimiert
3 rem 2015-10-01 Tale-X optimiert
4 rem nach run/stop mit goto27 zum textmodus
5 ti$="000000":dimf%(7000):clr
6 dimxp,yp,r,fl,f,x,y,ad,yq
7 m7=504:e4=40
8 yl=200:n1=-1:n5=.5:nh=900:eh=100:hs=160:sf=3136:vz=196
9 dimmi(319),ma(319),bi(7),li(24)
11 s=1:fort=7to0stepn1:bi(t)=s:s=s+s:next
12 a=8192:fort=0to24:li(t)=a:a=a+320:next
13 :
15 forx=.to319:mi(x)=yl:ma(x)=n1:next
16 poke53265,59:poke53272,24:poke53280,2
18 a=97:fort=1024to2023:poket,a:next
19 fory=30to-30stepn1:yq=y*y:xp=int(4*sqr(nh-yq)+n5)
20 forx=.toxp:r=sqr(x*x/sf+yq/vz)
21 f=cos(r)-cos(3*r)/3+cos(5*r)/5-cos(7*r)/7
22 fl=.:xp=hs+x-y:yp=eh+2*y-int(e4*f+n5)
23 ifmi(xp)>ypthenmi(xp)=yp:fl=1
24 ifma(xp)<ypthenma(xp)=yp:fl=1
25 ifflandyp>=.andyp<ylthengosub33
26 fl=.:xp=hs-x-y
27 ifmi(xp)>ypthenmi(xp)=yp:fl=1
28 ifma(xp)<ypthenma(xp)=yp:fl=1
29 ifflandyp>=.andyp<ylthengosub33
30 next:next:poke53280,3
31 forq=n1to.:geta$:q=a$=" ":next:sys58648:printti$:end
32 :end
33 ad=li(yp/8)+(xpandm7)+(ypand7):pokead,peek(ad)orbi(xpand7):return
34 :
35 rem ** c64 hat written 2015-08-20 by michael kircher
Alles anzeigen
Laufzeit jetzt: 30:08 (gegenüber Urfassung eine Einsparung von 26:15 Minuten -> 46% Einsparung). Das bringt was! 
Inspiriert hat mich dazu übrigens der KC85/3 mit seiner Kreiszeichenroutine (8 Punkte gleichzeitig) - das war sichtlich effizienter als das was Simons Basic malte...
Und nu viel Spaß beim knacken der 30:00er Marke - im Array- statt Poke-Thread gibt's einen Tipp dafür.
Frohes Experimentieren (und nicht immer nur auf den Code schauen!
)
Tale-X