Fraktal-Retro-Kram...

Offtopic Themen bitte hier hinein.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Fraktal-Retro-Kram...

Beitrag von yeti »

Vor Ewigkeiten hatte ich mal ein Apfelmännchenprogramm in 68000-Assembler geschrieben, das ohne Fließkommaarrithmetik auskam und in den Bootsektor der damaligen Atari-ST-Disketten passte...
...und irgendwann mal unter Linux in C mit Ausgabe via SVGALib und so kompakt, daß es als Signatur tauglich war...

Und jetzt <trommelwirbel> gibt es auch die Spin-Version </trommelwirbel>.

Ich hatte es bislang nur in Spinsim laufen und Spinsim hat keine Graphik...

Code: Alles auswählen

(yeti@darkstar:5)~/wrk/propeller/spinsim/mandelbrot$ cat mandelbrot-20140625.spin 
' mandelbrot-20140625
'
con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=-8601    ' int(-2.1*4096)
  xmax=2867     ' int( 0.7*4096)

  ymin=-4915    ' int(-1.2*4096)
  ymax=4915     ' int( 1.2*4096)

  maxiter=25

  MPX=79        ' 0..79
  MPY=24        ' 0..24

obj
  ser : "conio"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py

  ser.start(31, 30, 0, 115200)

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<16384
        xn:=((x*x-y*y)~>12)+cx
        yn:=((x*y)~>11)+cy
        x:=xn
        y:=yn
        rsq:=(x*x+y*y)~>12
        iter+=1
      cx+=dx
      ser.out(iter+32)
    cy+=dy
    ser.out(10)
(yeti@darkstar:5)~/wrk/propeller/spinsim/mandelbrot$ spinsim mandelbrot-20140625.binary 
!!!!!!!!!!!!!!!"""""""""""""####################################""""""""""""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$$%'+)%%%$$$$$#####"""""""""""
!!!!!!!!!!!"""""""#######################$$$$$$$$%%%&&(+,)++&%$$$$$$######""""""
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*4:/+('&%%$$$$$$#######"""
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''),:::::::,'&%%%%%$$$$########
!!!!!!!"""####################$$$$$$$$%%%&'())((())*,::::::/+))('&&&&)'%$$######
!!!!!!""###################$$$$$%%%%%%&&&'+.:::/::::::::::::::::/++:..9:%%$#####
!!!!!"################$$$%%%%%%%%%%&&&&'),+1:::::::::::::::::::::::::1(&&%$$####
!!!!"##########$$$$$%%&(-(''''''''''''(*,5::::::::::::::::::::::::::::+)-&%$$###
!!!!####$$$$$$$$%%%%%&'(*-:1.+.:-4+))**:::::::::::::::::::::::::::::::4-(&%$$$##
!!!!#$$$$$$$$$%%%%%%'''++.6:::::::::8/0::::::::::::::::::::::::::::::::3(%%$$$$#
!!!#$$$$$$$%&&&&''()/-3.5::::::::::::::::::::::::::::::::::::::::::::::'&%%$$$$#
!!!(**+/+:523/:0/46::::::::::::::::::::::::::::::::::::::::::::::::4+)'&&%%$$$$#
!!!#$$$$$$$%&&&&''().-2.:::::::::::::::::::::::::::::::::::::::::::::::'&%%$$$$#
!!!!#$$$$$$$$$%%%%%&'''/,.7::::::::::/0::::::::::::::::::::::::::::::::0'%%$$$$#
!!!!####$$$$$$$$%%%%%&'(*-:2.,/:-5+))**:::::::::::::::::::::::::::::::4+(&%$$$##
!!!!"##########$$$$$%%&(,(''''(''''''((*,4:::::::::::::::::::::::::::4+)-&%$$###
!!!!!"################$$$%%%%%%%%%%&&&&'):,4:::::::::::::::::::::::::/('&%%$####
!!!!!!""##################$$$$$$%%%%%%&&&'*.:::0::::::::::::::::1,,://:)%%$#####
!!!!!!!"""####################$$$$$$$$%%%&(())((()**-::::::/+)))'&&&')'%$$######
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''(,:::::::+'&&%%%%%$$$########
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*7:0+('&%%%$$$$$#######"""
!!!!!!!!!!!"""""""######################$$$$$$$$$%%%&&(+-).*&%$$$$$$######""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$%%'7(%%%$$$$$######""""""""""
!!!!!!!!!!!!!!!""""""""""""#####################################""""""""""""""""
(yeti@darkstar:5)~/wrk/propeller/spinsim/mandelbrot$ _
...ursprünglich wollte ich es auch noch auf höhere Genauigkeit bringen (siehe Spin-**-Operation), aber dann drängelten sich wieder andere Einträge meiner unendlichen MMMABSSGDAHListe (Mach-Mich-Mal-Am-Besten-Sogar-Schon-Gestern-Du-Alter-Hänger-Liste) vor...

So liegt es nun seit vielen Tagen rum und würde sich sicher über etwas Zuwendung freuen!

...vielleicht mag ja JemandIn damit weiterspielen, dem ganzen Graphik aufpfropfen oder WasAuchImmer...

edit@20170604: Eine Variante mit Graphik ist in einem Nachbarthread erwähnt.
Zuletzt geändert von yeti am So 4. Jun 2017, 09:44, insgesamt 1-mal geändert.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PropellerFan
Beiträge: 78
Registriert: Di 10. Jan 2012, 17:10
Wohnort: ESSEN

Re: Fraktal-Retro-Kram...

Beitrag von PropellerFan »

Tach!

Vor ein paar Tagen habe ich auf einem Recyclinghof einen GTR eingesteckt. Es ist ein Casio fx-7000G von 1985. Das war damals der erste erhältliche Grafiktaschenrechner (laut Wikipedia). Das Teil hat auch einen Programmiermodus in einem tokenbasierten Basic. Im Internet habe ich dann ein Programm für die Berechnung eines Fraktals gefunden. Der Rechner hat dafür 104 min. und 32 sek. gebraucht :lol:

Hier das Ergebnis:
Bild
Viele Grüße, PropellerFan
EIN WEITERER ATARI ST BESITZER UND FAN!!!
Mein HIVE ist der 300!

Open Source, Open mind.
Klaus-Peter
Beiträge: 754
Registriert: Sa 29. Okt 2011, 14:34

Re: Fraktal-Retro-Kram...

Beitrag von Klaus-Peter »

Cool - und jetzt mal reinzoomen in das Apfelmännchen :mrgreen:
Drohne 206 ist ein HIVE R14-u
Drohne 266 ist ein HIVE R14-V
Der Mensch ist das wichtigste und kostbarste Peripheriegerät einer Computeranlage.
Benutzeravatar
digger
Administrator
Beiträge: 676
Registriert: Sa 23. Mai 2009, 22:44
Wohnort: Schorfheide
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von digger »

Da hättest du aus dem Gedächtnis das Apfelmännchen per Hand wesentlich schneller fertig gepixelt. ;-)
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von yeti »

Update: Jetzt mit dramatisch verbeserter Genauigkeit!

Code: Alles auswählen

' mandelbrot-20150214
'
con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=-563714457 ' -2.1
  xmax=187904819  '  0.7

  ymin=-322122547 ' -1.2
  ymax=322122547  '  1.2

  maxiter=24

  MPX=79          ' 0..79
  MPY=24          ' 0..24

  c4=1073741824

obj
  ser : "conio"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py

  ser.start(31, 30, 0, 115200)

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<c4
        xn:=((x**x-y**y)<<4)+cx
        yn:=((x**y)<<5)+cy
        x:=xn
        y:=yn
        rsq:=(x**x+y**y)<<4
        iter+=1
      cx+=dx
      ser.out(iter+32)
    cy+=dy
    ser.out(10)
Die Multiplikation wird dabei zu
        mul(x,y) = (x**y)<<4
und bietet Vorzeichen, 3 Bits vor dem Dezimalpunkt und der Rest ist der gebrochene Anteil der Zahl. Prinzipbedingt sind nach dieser Multiplikation die niedrigsten 4 Bits = %0000.

** macht diese 28-Bit-Arrithmetik "billig", mehr Genauikeit würde spürbar komplexere Operationen erfordern.

Der Vollständigkeit halber das Ergebnis:

Code: Alles auswählen

(yeti@aurora:3)~/wrk/propeller/spinsim$ /opt/parallax/bin/spinsim main.binary 
!!!!!!!!!!!!!!!"""""""""""""(&###$('$)*'&%)*####################"""""""""""""""+
!!!!!!!!!!!!!"""""""""$,%)##'1%$%$%%')#######$0'%+$$%'0(%&-$$1%$####$"""""""""""
!!!!!!!!!!!"""""""%$)###$&&)+%%'%)#######$)%%&&$$'&%4&(+,)+3'$$$&%'&####)$""""""
!!!!!!!!!"""""()&##$$$,'$,$$'&#######5%&(/)$$$$)+%%&'1*99/**)(%+$$$%%(####'%$"""
!!!!!!!!""""(##$%-+%%%%%%$#######)+)('%$$$$&%%))&)'/,9999999+'&%%%&($$$/####$$('
!!!!!!!"""#%-+($%$(2$%########&')$$$$$'&%&'-,+)-(+)*/999999..)+('&&&&/&&$&###$&&
!!!!!!""-)&%&&%%$##########$$$$$%.1'%%&+&'+.99908999999999999999/+.9739)%*$####'
!!!!!"$&+$/$##########$$$/)+*'&%%%%,4&&'+-+799999999999999999999999997(&++$$####
!!!!"6+%#######')$$$)%&(,,**-+''(-*('((/259999999999999999999999999994,)4-&$%###
!!!!+###9'(&(($$&)(*%*0*20922+89-7,)),*99999999999999999999999999999999+''*$&'##
!!!!#,%'&&)$$$*(%%%%+''++.7999999999902999999999999999999999999999999999'%0$,'-#
!!!#'$$$$$$%'**&**)).24.69999999999999999999999999999999999999999999999'(%)$$%&#
!!!69999999999999999999999999999999999999999999999999999999999999992++'&(%*$$(%#
!!!#'$$$$$$%'**&**)).24.69999999999999999999999999999999999999999999999'(%)$$%&#
!!!!#,%'&&)$$$,(%%%%1''++.7999999999902999999999999999999999999999999998'%-$+')#
!!!!9###+'(&(($$&)(+%*/*30926+69-7,)),*99999999999999999999999999999998+''-$&'##
!!!!"+*%#######')$$$)%&(,1**-+''(4*('((0259999999999999999999999999994,)47&$%###
!!!!!"$&*$+$##########$$$/)0)'&%%%%+*&&'+-+799999999999999999999999999(&/5$$####
!!!!!!"",)&%&&%%$##########$$$$$%+,'%%&6&'+.99908999999999999999/+.9939)%*$####'
!!!!!!!"""#%+3($%$()$%########&'*$$$$$'&%&'/,+)0(+)*/999999..)+('&&&&/&&$&###$&&
!!!!!!!!""""(##$%,+%%%%%%$#######)+)('%$$$$&%%))&)'2,9999999+'&%%%&($$$.####$$('
!!!!!!!!!"""""*)&##$$$)'$+$$'&#######6%&(,,$$$$),%%&'-*99/**)(%*$$$%%(####'%$"""
!!!!!!!!!!!"""""""%$,###$&&-.%%'%)#######$)%%&&$$'&%.&(+,)+/'$$$&%'&####*$""""""
!!!!!!!!!!!!!"""""""""$*%)##'*%$%$%%')#######$2'%5$$%'0(%&0$$)%$####$"""""""""""
!!!!!!!!!!!!!!!"""""""""""""(&###$('$+*'&%)0####################""""""""""""""")
Das Proggie mal auf 800x600 bei 100 Iterationen und ein PGM-Bild als Ausgabeformat (musste ich in GIF wandeln, da das Forum .PGM nicht mag...) umgestrixxelt, ergibt sich Folgendes:
Da ist wohl noch ein Wurm drin...
Da ist wohl noch ein Wurm drin...
Schon recht nett, aber irgendwo ist da noch ein interessanter Wurm drin... mal schau'n wann ich dem auf die Schliche komme...
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von yeti »

Okay... nach Anstarren des Quelltextes von offensichtlich endlicher Dauer (im Gegensatz zu Debugger anwerfen!) war es dann so weit und der Groschen (liebe Kids, das entspricht heute der 5-€uro¢ent-Münze!) ist gefallen... ;-)

Die letzten 4 Bits der 28-Stelligen Fixpunktarrithmetik, die theoretisch immer %0000 sein sollten, sind das Problem. Sie bleiben durch die sorglose Rumrechnerei ohne dies Endnibble brav immer wieder zu nullen eben nicht %0000.

Auf der Suche nach einem Kompromiß zwischen Rechenaufwand der Fixpunktmultiplikation und ihrer Genauigkeit habe nun zu 24 Nachkommastellenbits gegriffen.

Die 28-Nachkommastellen-Fixpunktmultiplikation (die mit den Zwangs-%0000-Bits am Ende ja auch eine 24-Nachkommastellen-Genauigkeit hat) zu retten hätte Nibble-Operationen erfordert. Bei 24-Nachkommastellen sind die notwendigen zusätzlichen Schritte Byte-Operationen, die Spin leichter ausm Ärmel schüttelt.

Code: Alles auswählen

' mandelbrot-20170604

con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=round(-2.1*float(1<<24))
  xmax=round( 0.7*float(1<<24))

  ymin=round(-1.2*float(1<<24))
  ymax=round( 1.2*float(1<<24))

  maxiter=32

  MPX=79 ' 0..MPX
  MPY=24 ' 0..MPY

  c4=4<<24

obj
  ser : "FullDuplexSerial"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py

  ser.start(31, 30, 0, 115200)

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<c4
        xn:=((fpm(x,x)-fpm(y,y)))+cx
        yn:=2*fpm(x,y)+cy
        x:=xn
        y:=yn
        rsq:=fpm(x,x)+fpm(y,y)
        iter+=1
      cx+=dx
      ser.tx(iter+32)
    cy+=dy
    ser.tx(10)

  waitcnt(_clkfreq+cnt)
  ser.stop
  cogstop(0)

'
'           AAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaa
' *         BBBBBBBBbbbbbbbbbbbbbbbbbbbbbbbb
'           ================================
' = CCCCCCCCCCCCCCCCcccccccccccccccccccccccccccccccccccccccccccccccc
'   \______________  ______________/\______________  ______________/
'                  \/                              \/
'              SChi:=SA**SB                    SClo:=SA*SB
'
pri fpm(SA,SB) | SClo
  SClo:=(SA*SB)
  return (SA**SB)<<8 | SClo.byte[0]
...und nun schaut das Ergebnis wieder "glatt" aus:

Code: Alles auswählen

!!!!!!!!!!!!!!!"""""""""""""####################################""""""""""""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$$%'/(%%%$$$$$#####"""""""""""
!!!!!!!!!!!"""""""#######################$$$$$$$$%%%&&(++)++&$$$$$$$######""""""
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*A;/*('&%%$$$$$$#######"""
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''),AAAAAAA+'&%%%%%$$$$########
!!!!!!!"""####################$$$$$$$$%%%&'())((())*-AAAAAA.+))('&&&&+&%$$######
!!!!!!""###################$$$$$%%%%%%&&&'+.AAA08AAAAAAAAAAAAAAA/+,A//A)%%$#####
!!!!!"################$$$%%%%%%%%%%&&&&')-+7AAAAAAAAAAAAAAAAAAAAAAAAA4(&&%$$####
!!!!"##########$$$$$%%&(,('''''''''''((*-5AAAAAAAAAAAAAAAAAAAAAAAAAAA3+)4&%$$###
!!!!####$$$$$$$$%%%%%&'(*-A1.+/A-4+))**AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3+'&%$$$##
!!!!#$$$$$$$$$%%%%%%'''++.7AAAAAAAAA9/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<6'%%$$$$#
!!!#$$$$$$$%&&&&''().-2.6AAAAAAAAAAAAA>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'&%%$$$$#
!!!.3;5;;AA<AA=<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2+)'&&%%$$$$#
!!!#$$$$$$$%&&&&''().-2.6AAAAAAAAAAAAA>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'&%%$$$$#
!!!!#$$$$$$$$$%%%%%%'''++.7AAAAAAAAA9/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<6'%%$$$$#
!!!!####$$$$$$$$%%%%%&'(*-A1.+/A-4+))**AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3+'&%$$$##
!!!!"##########$$$$$%%&(,('''''''''''((*-5AAAAAAAAAAAAAAAAAAAAAAAAAAA3+)4&%$$###
!!!!!"################$$$%%%%%%%%%%&&&&')-+7AAAAAAAAAAAAAAAAAAAAAAAAA4(&&%$$####
!!!!!!""###################$$$$$%%%%%%&&&'+.AAA08AAAAAAAAAAAAAAA/+,A//A)%%$#####
!!!!!!!"""####################$$$$$$$$%%%&'())((())*-AAAAAA.+))('&&&&+&%$$######
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''),AAAAAA@+'&%%%%%$$$$########
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*A;/*('&%%$$$$$$#######"""
!!!!!!!!!!!"""""""#######################$$$$$$$$%%%&&(++)++&$$$$$$$######""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$$%'0(%%%$$$$$#####"""""""""""
!!!!!!!!!!!!!!!"""""""""""""####################################""""""""""""""""
Auch etwas höher aufgelöst ist noch Alles noch in Ordnung:
 <br /> <br />So muß Fraggle!<br /> 
 
 
So muß Fraggle!
 
Zuletzt geändert von yeti am So 11. Jun 2017, 19:47, insgesamt 5-mal geändert.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von drohne235 »

Hier die TriOS Version im Texmodus:

Code: Alles auswählen

' mandelbrot-20170604

con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=round(-2.1*float(1<<24))
  xmax=round( 0.7*float(1<<24))

  ymin=round(-1.2*float(1<<24))
  ymax=round( 1.2*float(1<<24))

  maxiter=32

  MPX=62 ' 0..MPX
  MPY=20 ' 0..MPY

  c4=4<<24

obj
  ios: "reg-ios"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py

  ios.start

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<c4
        xn:=((fpm(x,x)-fpm(y,y)))+cx
        yn:=2*fpm(x,y)+cy
        x:=xn
        y:=yn
        rsq:=fpm(x,x)+fpm(y,y)
        iter+=1
      cx+=dx
      ios.printchar(iter+32)
    cy+=dy
    ios.printnl

  waitcnt(_clkfreq+cnt)

'
'           AAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaa
' *         BBBBBBBBbbbbbbbbbbbbbbbbbbbbbbbb
'           ================================
' = CCCCCCCCCCCCCCCCcccccccccccccccccccccccccccccccccccccccccccccccc
'   \______________  ______________/\______________  ______________/
'                  \/                              \/
'              SChi:=SA**SB                    SClo:=SA*SB
'
pri fpm(SA,SB) | SClo
  SClo:=(SA*SB)
  return (SA**SB)<<8 | SClo.byte[0]

Dateianhänge
20170604_180244.jpg
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von drohne235 »

Jo, einen hab ich noch: Apple unter TriOS im G0 Grafikmodus, Auflösung 256x192, Rechenzeit 3:50 min. SO, wer schreibt jetzt die PASM Version für alle 8 COGs? Damit landen wir locker im Sekundenbereich... :mrgreen:

Code: Alles auswählen

' mandelbrot-20170604

con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=round(-2.1*float(1<<24))
  xmax=round( 0.7*float(1<<24))

  ymin=round(-1.2*float(1<<24))
  ymax=round( 1.2*float(1<<24))

  maxiter=32

  MPX=256 ' 0..MPX
  MPY=192 ' 0..MPY

  c4=4<<24

obj
  ios: "reg-ios"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py,gx,gy

  ios.start
  ios.g0_load
  ios.g0_static
 'ios.g0_setscreen($e04,$05,$06,$02) 'alternativ graukeil statt rgb
  waitcnt(cnt+clkfreq*3)

  ios.g0_clear
  ios.g0_width(0)
  gy := 0

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    gx := 0
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<c4
        xn:=((fpm(x,x)-fpm(y,y)))+cx
        yn:=2*fpm(x,y)+cy
        x:=xn
        y:=yn
        rsq:=fpm(x,x)+fpm(y,y)
        iter+=1
      cx+=dx

      ios.g0_color(3)
      if iter>8
        ios.g0_color(2)
      if iter > 16
        ios.g0_color(1)
      if iter > 24
        ios.g0_color(0)
      ios.g0_plot(gx++,gy)

    cy+=dy
    gy++

  waitcnt(_clkfreq+cnt)

'
'           AAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaa
' *         BBBBBBBBbbbbbbbbbbbbbbbbbbbbbbbb
'           ================================
' = CCCCCCCCCCCCCCCCcccccccccccccccccccccccccccccccccccccccccccccccc
'   \______________  ______________/\______________  ______________/
'                  \/                              \/
'              SChi:=SA**SB                    SClo:=SA*SB
'
pri fpm(SA,SB) | SClo
  SClo:=(SA*SB)
  return (SA**SB)<<8 | SClo.byte[0]


Dateianhänge
20170604_180124.jpg
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von yeti »

Die Version im Threadstart rechnet mit 12 Nachkommabits und ist dadurch einfacher und schneller. Aber beim Reinzoomen geht der Auflösung dieses Zahlenbereiches (in 1/4096-steln) natürlich schnell die Puste aus.

Die Version von heute sollte für ein paar nette Bildchen reichen mit ihren 24 Nachkommabits... ich hab's aber auch noch nicht an seine Grenzen getrieben...

Die Verteilung der Farben auf die ermittelten Iterationswerte macht dabei viel aus... da fängt's an, nimmer mein Ding zu sein... ich hab weder für Farben ein gutes Pfötchen, noch für Kunst im Allgemeinen...
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Fraktal-Retro-Kram...

Beitrag von yeti »

Nicht wirklich retro, aber rund ums Mandelbrötchen und irgendwie von überraschend bis spannend:

[Numberphile] The Mandelbrot Set

[Numberphile] Pi and the Mandelbrot Set

[Numberphile] Fibonacci Numbers hidden in the Mandelbrot Set

...also Spiel, Spaß und Spannung für die ganze Familie!
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Antworten