[ Foreign users: you can rename MNDL_ENG.RSC to MNDL_INT.RSC to get an english resource file for the program. A translation of this text will be made available if there is sufficient demand. Please drop me a note, e.g. on Atari Benelux BBS (Holland ..-31-3473-77584), or on the address below. ] MANDELBROT/JULIA-FRACTAL PLOTTER R 2.26. ======================================== Het programma MNDL_INT.PRG tekent Mandelbrot- en Julia-fractals (wiskundig berekende plaatjes, waarop 'eindeloos' kan worden ingezoomd) op het scherm. Het programma is tamelijk uitgebreid met een menubalk, save- en laadfunkties, uit- wisselbaarheid tussen schermresoluties, muisbesturing en een Undo-funktie. De plaatjes worden in een steeds fijner wordend raster opgebouwd zodat al snel een indruk van het geheel wordt verkregen. Met het bekende Alt-Help kunnen de plaatjes op een printer worden afgedrukt. Beginnen. -------- Nadat het programma is gestart begint het na een melding direkt te tekenen. Als het tekenen klaar is verschijnt een formulier met gegevens over het plaatje; nadat dit is verwijderd blijft het plaatje gewoon in beeld. Om ergens op in te zoomen kan (ook als het plaatje nog niet klaar is) door eenmaal de muisknop te bedienen de muispijl terug worden geroepen, waarna een kader om het gewenste gedeelte kan worden getrokken. Met de spatiebalk kan het menu van het programma worden opgeroepen. Bij het programma worden een paar demonstratiefiles (met extensie .MBP) geleverd, die een indruk geven van de plaatjes die kunnen worden gemaakt. Deze kunnen met de optie Laad file... op de gebruikelijke worden ingelezen, waarna het gewenste plaatje wordt getekend. Een kort overzicht van de beschikbare commando's krijgt U als U de Help- toets indrukt (deden meer programma's dat maar...). Verder kunt U de mogelijk- heden uit de menubalk aflezen, die U met de spatiebalk kunt oproepen en verwijderen. Overzicht van het programma. --------------------------- Het programma MNDL_INT (d.w.z. Mandelbrot met integer berekeningen) is geschikt voor elke Atari-resolutie; de lage kleuren-resolutie en de hoge monochrome geven op de ST de beste resultaten. Ook de schermresoluties en - kleuren van de STE en de TT worden ondersteund. Het programma vraagt niet meer dan 80 K geheugen plus ruimte voor een extra scherm en moet dus op elke Atari (Mega) ST/STE/TT/Falcon kunnen werken. Er is veel moeite gedaan om de snelheid van het programma zo hoog mogelijk te krijgen; waarschijnlijk is dit programma nu een van de snelsten op de Atari computers. Door de benodigde berekeningen zijn tekentijden van 1 tot 60 minuten per plaatje op een ST echter geen uitzondering. Door gebruik te maken van geheel-tallige berekeningen in zowel 16- als 32-bits nauwkeurigheid zijn de rekentijden bij niet te hoge vergroting zeer beperkt; het programma kiest automatisch de snelste rekenroutine die geschikt is. Vooral floating point coprocessors, maar ook snellere processors kunnen deze rekentijd beperken; een 68881-uitbreiding van de ST wordt automatisch gebruikt, en de 68882 van de TT kan met de speciale coprocessorversie van het programma worden benut. Er is een speciale geoptimaliseerde 32-bits rekenroutine voor de 68020 en hoger opgenomen waarop automatisch wordt overgeschakeld. Op de Falcon wordt zo mogelijk gebruik gemaakt van de DSP waardoor bij 24- en 48-bits berekening een zeer hoge snelheid mogelijk is. Het plaatje dat getekend wordt is een weergave van een tweedimensionale funktie, die dus aan elk punt van het vlak een waarde toevoegt. Deze waarde wordt weergegeven als een kleur of een grijstint. Om de funktiewaarde te krijgen moet een berekening met de koordinaten van een punt worden herhaald tot de uitkomst van deze berekening een bepaalde grens overschrijdt; het aantal herhalingen is dan de funktiewaarde van dat punt. Omdat bij heel wat punten van het vlak die grenswaarde nooit wordt bereikt moet er na een bepaald aantal herhalingen altijd worden afgebroken om niet eindeloos te blijven rekenen; dit aantal is in het programma instelbaar. Het aardige van dit soort plaatjes (fractals) is dat er eindeloos op ingezoomd kan worden waarbij vaak een bepaald patroon steeds weer terugkomt. Wiskundig is heel interessant dat de 'zwarte' gebieden allemaal met elkaar verbonden zijn; de omtrek van dit totale gebied wordt steeds groter naarmate verder wordt ingezoomd. Daarom wordt deze omtrek beschouwd als iets wat tussen een lijn (‚‚n dimensie) en een vlak (twee dimensies) inligt, en dus een gebroken dimensie ('fractal dimension') heeft. Voor meer informatie zie het "wiskundig aanhangsel" en de uitgebreide literatuur op het gebied van fractals. Als een plaatje helemaal klaar is verschijnt een formulier met een melding van het type fractal, de tekentijd, zoomfactor, de gebruikte berekeningsmethode en de begrenzingen van het getekende gedeelte van de fractal. Na het verwijderen van dit formulier kan het plaatje rustig worden bekeken. De grenzen van het in eerste instantie getekende gedeelte (het 'domein' van de funktie) zijn zo gekozen dat alle interessante informatie in beeld verschijnt (buiten de getoonde cirkel is verder alles 'wit'). Om in te zoomen kan de muispijl worden teruggehaald met een druk op de linker muisknop, of de toets Escape. Door bij het inzoomen het kader leeg te laten of achteraf de Undo-toets te gebruiken kan de oude situatie worden hersteld (Let wel: Undo kan maar ‚‚n stap teruggaan!). Om uit te zoomen kan Undo worden gebruikt (naar de vorige situatie), Ctrl-N (naar de startsituatie), of kan het gewenste domein in het formulier invullen. In het laatste geval worden de X- en Y-waarden eventueel bijgesteld om de verhouding kloppend te houden; U hoort dan een 'ping' en ziet het formulier nogmaals, maar met de gewijzigde waarden. Het parameter-formulier kan tijdens het tekenen met Ctrl-I worden opgeroe- pen. In dit formulier kan ook het afbreekpunt voor de berekening worden gewijzigd (hoe lager hoe sneller en hoe minder details). Een redelijke waarde hiervoor is ergens tussen 50 en 200; het programma kan zonodig veel verder gaan, maar de tekentijd wordt dan soms wel wat groot. Er kan worden omgeschakeld tussen de Mandelbrot-fractal en de verwante Julia-fractal-'familie' met de Tab-toets (de naam van deze fractals verwijst niet naar een intelligente dame, maar naar de franse wiskundige Gaston Julia). Het verband tussen beide fractals is daarbij dat het midden van het getoonde scherm van de Mandelbrot-fractal de parameter is van de Julia fractal. Ook op deze Julia-fractal kan weer worden ingezoomd. Het info-formulier geeft bij een Julia-fractal ook de Julia-parameter aan, die natuurlijk ook kan worden gewijzigd. De Julia-parameter kan ook met de muis worden aangegeven in de Mandelbrot-figuur. Daarvoor moet de optie 'Kies Julia-waarde' worden gekozen (of Control-J). Ook kan op het volle scherm de muiskursor met shift-klik worden opgeroepen. Er verschijnt dan in elk geval een kruisje in plaats van de muispijl. Met de volgende klik wordt dan de Julia-parameter gekozen en wordt naar de Julia-fractal omgeschakeld. Er moet rekening mee worden gehouden dat het programma om sneller te werken pas aan het einde van een getekende regel toetsen verwerkt; tegen het einde van het tekenen van een plaatje is dit duidelijk merkbaar. Kleuren. ------- Bij gebruik van een kleurenmonitor kunnen de kleuren voor de plaatjes met het standaard Atari Control Panel (CONTROL.ACC) worden ingesteld. Een regen- boogverloop of overvloeiende kleuren geven vaak hele mooie resultaten. Bij het instellen van kleuren moet erop worden gelet dat de eerste kleur (kleur 0, normaal wit) wordt gebruikt voor de achtergrond van de dialoogboxen, en de tweede kleur (kleur 1, normaal zwart) voor de tekst van de dialoogboxen. Kleur 0 wordt gebruikt voor het buitenste gebied en voor de schermrand. Kleur 1 wordt gebruikt voor die gebieden waarin de berekening is afgebroken en wordt normaal verder overgeslagen (als de kleuren op zijn wordt weer van voren af aan begonnen). Het aangemaakte palet wordt met het plaatje opgeslagen, maar kan ook apart worden bewaard met Alt-S (met extensie '.CLR'). De zo aangemaakte paletten kunnen met Alt-L weer worden ingeladen. U bent daarbij niet beperkt tot hetzelfde aantal kleuren, maar kunt ook grotere paletten inladen voor het paletroteren (zie verderop). Helaas kunnen ingeladen paletten niet met het Control Panel worden gewijzigd, omdat het Control Panel bij zijn oproep alles terugzet op de oorspronkelijke desktopkleuren; dit werkt wel goed met het nieuwe Extensible Control Panel (XCONTROL.ACC) van Tos 2.xx / 3.xx. De ingestelde paletten worden tijdelijk weer weggehaald wanneer op een andere applikatie wordt overgestapt (een accessoire, of een programma onder Multitos); dit kan worden uitgezet bij de kleuren-opties. Om de kleuren via het control panel te kunnen wijzigen moet dit dus worden uitgezet! Bij gebruik van een monochrome monitor worden verschillende vulpatronen gebruikt om grijstinten te verkrijgen; de elementen van het beeld zijn dan 2 * 2 pixels groot. Wanneer de gebieden met gelijke waarden slechts klein zijn valt het onderscheid tussen de verschillende grijstinten weg, maar is het resultaat wel aangenaam om te zien. Ditzelfde effekt kan ook op kleurenmonitoren worden verkregen, maar kan dan bovendien in twee verschillende kleuren worden gemaakt ('duochroom'). Op kleurenmonitoren kan het palet doorlopend worden verschoven, waardoor een aardig 'vloeistofdia'-effekt ontstaat (hey man, helemaal te waaaauw ...). Dit wordt gestart met de '+' of '-' toets. Tijdens het schuiven kan een extra hulp- formulier worden opgeroepen met de Help-toets. De rotatietijd kan worden veranderd met de pijltjestoetsen omhoog en omlaag. Bij het stoppen kan het verschoven palet worden overgenomen (Return) of kan het oorspronkelijke palet worden hersteld (Esc). In True Color is palet roteren niet mogelijk omdat daarvoor in plaats van het palet het hele scherm zou moeten worden bijgewerkt. Het paletroteren werkt op het ingeladen palet, dat ook groter mag zijn dan het aantal schermkleuren. Dan wordt steeds een deel van dit palet zichtbaar, wat een mooi effekt geeft. Bij het starten van het programma kan automatisch een kleurpalet worden geladen. Dit palet moet de naam 'DEFxxxxx.CLR' hebben, waarbij xxxxx het aantal kleuren is waarvoor het palet is bedoeld. Het palet moet in dezelfde folder staan als het programma. Opslaan en inladen van plaatjes. ------------------------------- De getekende plaatjes kunnen op schijf worden bewaard om ze later nog eens te kunnen bekijken of ze in andere programma's te gebruiken. Daarbij wordt ook een file met de bijbehorende parameters aangemaakt (met extensie '.MBP'). Dit geldt ook voor niet-voltooide plaatjes; deze worden na inladen verder getekend. Het programma kan alleen plaatjes inladen die met dezelfde resolutie zijn opgeslagen, anders wordt het plaatje vanuit de parameterfile opnieuw opgebouwd (op deze manier kan een bepaald gebied gemakkelijk in een andere resolutie worden teruggehaald). Het is handig om aparte folders of diskettes te gebruiken voor de verschillende resoluties; de plaatjes kunnen dan verder met dezelfde naam worden opgeslagen. Normaal gebruikt het programma het GEM X-Image (.IMG) formaat, omdat dit voor alle beeldschermformaten geschikt is. Verder kan het formaat van het bekende tekenprogramma Degas worden gekozen voor ST- en TT-resoluties, zowel normaal als gecomprimeerd (.PIx en .PCx). Dit gebeurt in het 'Algemene opties' formulier. De meeste andere programma's kunnen de plaatjes zo direkt inlezen, en anders kan met een van de vele plaatjes-konverteringsprogramma's het formaat worden omgezet. In First Word Plus kunnen ST monochrome .IMG plaatjes in elk geval gebruikt worden (ze moeten daarvoor in dezelfde folder als de First Word Plus file staan). Het desktop publishing programma Calamus accepteert ook de kleuren .IMG plaatjes, wanneer voor 'XIMG kleuren in tos-volgorde' is gekozen. Voor GEMView moet de parameter voor de XIMG kleurvolgorde in beide programma's op dezelfde volgorde zijn ingesteld. Het PD programma Deskpic, dat een plaatje als achtergrond op de desktop kan leggen, kan ook de IMG files lezen. De duochroom plaatjes met de gewone desktopkleuren zijn hiervoor heel bruikbaar om een niet al te afleidende achtergrond te krijgen. De True Color .IMG plaatjes zijn niet standaard en worden waarschijnlijk niet door andere programma's geaccepteerd. Afdrukken. --------- Het programma beschikt over een speciale printerroutine voor Epson- compatible printers, die een betere (maar monochrome) afdruk geeft dan de screendump van Alt-Help. De routine drukt het scherm namelijk bijna 1:1 af, zodat elk pixel even groot wordt afgedrukt (bijna alle Epson-compatible printers kunnen dit aan). Alleen pixels met kleur 1 (normaal zwart) worden afgedrukt, dit geldt ook in kleur! Voor de normale kleur-afdrukken kan alsnog Alt-Help worden gebruikt; het printertype moet daarvoor via het Control Panel worden ingesteld. Met de Control Panel optie 'draft'/'final' kan de afdrukkwaliteit worden gekozen, terwijl met 'single' of 'feed' kan worden ingesteld op resp. A4 vellen en 12" kettingpapier; ook de poortinstelling wordt gevolgd (serieel of paral- lel). De printerroutine is vooral goed te gebruiken voor de zwart/wit plaatjes met rasters, die ook op kleurenschermen kunnen worden gemaakt (zie kleur- opties). Ook is het aardig om in de plaatjes kleur 1 wŠl te gebruiken (ook weer in kleur-opties), waardoor her en der pixels op het papier verschijnen. De animatie mogelijkheid. ------------------------ Het programma is in staat reeksen plaatjes te maken die achter elkaar op het scherm getoond een soort film kunnen vormen. Het programma kan dit vertonen echter niet zelf, hiervoor is een apart programma nodig. In het public domain zijn heel wat van dergelijke programma's beschikbaar (onder de naam 'picture viewer' of 'slide show') en een variant voor de TT-resoluties van dit programma is in voorbereiding. Voor het aanmaken van zo'n reeks kan het beste als volgt te werk worden gegaan: 1. Sla een plaatje op dat als begin van de reeks kan dienen. Bedenk hierbij dat de laatste 3 karakters van de filenaam (voor de punt) als teller worden gebruikt voor de reeks, dus bijv. FNAAM000.IMG, FNAAM001.IMG etc. Tijdens het maken van de animatie worden alle benodigde files zonder navraag aangemaakt en worden bestaande zonodig overschreven! 2. Zoom (een aantal keren) in tot een plaatje dat als einde van de reeks kan dienen. Het is handig (maar niet noodzakelijk) om dit plaatje ook te bewaren. 3. Laad het in 1. opgeslagen plaatje weer in als U meerdere keren hebt ingezoomd. In elk geval moet na 3. met Undo geschakeld kunnen worden tussen het eerste en het laatste plaatje van de reeks. 4. Kies in de menubalk of met de toetsen de optie 'animatie'. Er verschijnt een dialoogbox waarin U het totale aantal plaatjes kunt invullen. Na OK wordt het aanmaken gestart, met Cancel kunt U zich nog bedenken. 5. Als het laatste plaatje is getekend en opgeslagen wordt dit gemeld. Als de disk vol is wordt dit uiteraard ook gemeld; de animatie moet dan nog handmatig worden afgebroken. Tijdens het maken van een animatie zijn alle funkties beschikbaar; bij elke toetsindruk wordt eerst het nummer van het plaatje en het totale aantal gemeld. Er moet wel op worden gelet dat zodra een plaatje klaar is dit zonder meer wordt opgeslagen; bij twijfel dus liever de zaak met rust laten. Eventueel kan met wat handigheid een afgebroken animatie worden voortgezet met het laatste en het laatst getekende plaatje door het gewenste aantal te verlagen. Er moet rekening mee worden gehouden dat afrondingsfouten (voornamelijk bij de 16-, 24- en 32-bits berekeningen) ook tussen de plaatjes bestaan en soms bij de animatie hinderlijk zichtbaar worden; zonodig kan een nauwkeuriger rekenme- thode worden gekozen. Een interessant effekt geeft het wanneer dezelfde uitsnede met verschillende rekendiepte achter elkaar worden getoond; het plaatje 'groeit' dan als het ware op het scherm. Technische informatie. --------------------- MNDL_INT is in de programmeertaal C geschreven, met assembler subroutines voor de berekeningen. Het programma is resolutie-onafhankelijk en moet dus op elke ST-compatible computer kunnen worden gebruikt. Normaliter gebruikt het programma Line-A routines voor het tekenen, omdat deze een stuk sneller zijn dan de VDI-routines; er wordt nooit direkt in het beeldschermgeheugen geschreven. Bij gebruik van exotische schermresoluties wordt teruggeschakeld naar alleen VDI-routines. De routine voor duochroom tekenen is erg traag; dit ligt aan de truken die nodig zijn om dit in VDI voor elkaar te krijgen (line-A is hiervoor niet altijd geschikt). Het gebruik van een beeldversneller kan de tekentijd vaak nog behoorlijk bekorten; het programma werkt in elk geval samen met Turbo-ST of NVDI 2.01. De pure tekentijd is bij ingewikkelder plaatjes echter onbelangrijk ten opzichte van de rekentijd (behalve bij de DSP!). Ook zou het programma op een TT in het snellere TT-RAM geladen moeten kunnen worden; dit is echter nog niet getest. Het werkt in ieder geval wel met de nieuwe multitasking versie van The Operating System, MultiTos. Het nut van de integer-berekeningen kan worden ge‹llustreerd met de volgende cijfers voor een redelijk ingewikkeld plaatje op de TT: 16-bit berekening: 38.06 s 100 % 32-bit berekening: 57.93 s 152 % floating point: 41:14.83 s 6502 % coprocessor 68882: 1:54.08 s 300 %. Het is dus duidelijk dat er heel veel tijd wordt gewonnen door de integer- berekening (hier 65 keer zo snel), en dat ook een floating point coprocessor het hiertegen moet afleggen (in dit geval 3 keer trager). De afwijkingen die bij de integer-berekeningen optreden zijn meestal heel beperkt: vaak zijn de geleverde beelden volkomen identiek, soms wijken ze door aanpassing van de schaal en door afrondingsfouten wat meer af. Voor elke iteratie zijn 3 vermenigvuldigingen en 5 optellingen nodig. Bijvoorbeeld: bij een helemaal 'zwart' plaatje, 150 iteraties en 320 x 200 beeldpunten (ST low of ST high) komt dit dus neer op 28.800.000 vermenigvuldi- gingen en 48.000.000 optellingen... Zelfs bij ruim 100.000 vermenigvuldigingen per sekonde (16-bits berekeningen op een Atari ST) kost dit dus behoorlijk wat tijd. Uiteraard wordt het worteltrekken uit de formule (zie wiskundig aanhang- sel) achterwege gelaten, in plaats daarvan wordt met het kwadraat van de limiet vergeleken. De DSP berekening op de Falcon haalt met 8 instrukties/9 cycli per iteratie zo'n 1.8 miljoen iteraties per sekonde, waarmee het bovenstaande plaatje dus in maximaal 6 sekonden wordt berekend. In werkelijkheid is dit sneller omdat er gebruik wordt gemaakt van periodeherkenning. Hierbij wordt een eventuele herhaling van de waarden in een reeks herkend, waardoor zodra zich dat voordoet kan worden vastgesteld dat de reeks konvergeert. Het programma is (in ST resoluties) ook te gebruiken met het (shareware) programma BIGSCREEN; hiermee kunnen de plaatjes veel groter worden getekend en bovendien ook op dat formaat afgedrukt worden. Bigscreen laat op normale schermgrootte een uitsnede van het ingestelde grote scherm zien, waarover met de muis kan worden gescrolld. Het werken ermee vergt wel wat handigheid, omdat bijvoorbeeld invulformulieren niet altijd in de aktuele uitsnede zichtbaar zijn. De afdrukroutine is momenteel nog beperkt tot 640 pixels breedte, maar de hoogte kan voor 12" papier tot zo'n 800 pixels worden opgevoerd. Een beperking van First Word Plus (2.02): dit programma accepteert plaatjes hooguit tot 500 pixels vertikaal. Bij schermresoluties die niet door Degas worden gebruikt (bijv. TT resoluties) wordt in .PIx- of .PCx-mode een Degas-achtig opslagformaat gebruikt (resolutie-code, kleurentabel van minstens 16 posities gevolgd door de beeld- schermgegevens); deze plaatjes kunnen dus niet in Degas worden ingeladen! Dit geldt ook voor afwijkende resoluties zoals die met Bigscreen of Overscan worden gekregen. Bij niet-ST resoluties is in het gecomprimeerde Degasformaat afgezien van de 40-byte compressielimiet die Degas hanteert, om een betere compressie te krijgen. Overigens zijn de gecomprimeerde plaatjes vaak slechter te comprimeren met de gebruikelijke datacompressieprogramma's dan niet-gecomprimeerde (bijv. LHarc op NAAM.PCx losgelaten geeft een +/- 10% groter resultaat dan op NAAM.PIx, hetzelfde geldt voor .IMG files). Als de kleurenvolgorde niet goed is ingesteld (tos-volgorde of vdi-volgorde) zullen sommige programma's de plaatjes in valse kleuren weergeven. De parameterfiles bevatten alle gegevens die het plaatje beschrijven en de gegevens waarmee het tekenen kan worden voortgezet. De parameterfiles kunnen ook afzonderlijk in het programma worden geladen, waarbij het tekenen dan zonodig van voren af aan begint. Deze files vormen (samen met het palet) zodoende de hoogste compressie die voor de plaatjes mogelijk is, en ze zijn bovendien resolutie-onafhankelijk. De decompressie kost alleen wat tijd ... De paletfiles worden in het volgende formaat opgeslagen: 1 long magic word 'VDIP' (VDI palet) n long gecomprimeerde VDI-paletentry, in Pure C opgebouwd als bitveld: typedef struct { red : 10; /* 0 .. 1000 */ gr_h: 5; gr_l: 5; /* hier begint het lo-word */ blue: 10; } PALETTE_ENTRY; Het aantal entries is afhankelijk van het aantal VDI-kleuren bij de gekozen resolutie. Het programma leest zoveel entries als het kan gebruiken, en klaagt niet als er te veel in de file staan. In True Color mode worden altijd alle kleuren van het palet ingelezen, dus er kunnen daarmee maximaal 32500 kleuren tegelijk worden getoond. Plaatje waarin duidelijk meer dan 256 kleuren te zien zijn zijn echter zeldzaam. De resourcefile bevat alle tekst uit het programma waardoor het relatief eenvoudig is om het programma te vertalen. Wel moet de structuur van de resource intakt blijven en moet erop worden gelet dat de C-conversiespecifikaties (%s, %3d etc.) aanwezig blijven en evenveel ruimte in de strings houden. De default extensies van de parameterfiles en de paletfiles zijn hier ook in opgenomen zodat die desgewenst gewijzigd kunnen worden. Het programma kan worden ge‹nstalleerd als applikatie voor .MBP files, zodat een plaatje direkt kan worden ingeladen en evt. verder getekend. Om het standaard palet te kunnen vinden moeten daarbij de instellingen 'Default dir: application' en 'Parameter: Full path' worden gemaakt. Commandline opties kunnen hier ook worden ingevoerd; ze moeten wel gevolgd worden door een spatie. Er zijn de volgende commandline opties beschikbaar: -v: alleen VDI routines gebruiken, voor het geval een VDI-driver geen afwijkende waarden van beeldgrootte of resolutiecode levert; -d: DSP niet gebruiken (als die er wel is); -b: geen bel-geluid bij voltooien plaatje; -f: geen formulier " " " ; -p: paletten niet automatisch omschakelen; -s: extra beveiligingen uit; -t: XIMG tos-volgorde uit; -c: commandline (batch)mode: ingeladen plaatje uitwerken en direkt terugkeren. Tenslotte. --------- Dit programma is voor iedere ge‹nteresseerde geschreven en mag alleen gratis of tegen materiaalkosten, kompleet en onveranderd, worden verspreid. Het is enerzijds een poging om een 'net' resolutie-onafhankelijk GEM-programma te schrijven voor de Mandelbrot- en Julia-fractals, en anderzijds bedoeld om de snelheid van de Atari computers te demonstreren, met name in vergelijking met Fractint op de PC (die het met glans doorstaat!). Het totale pakket omvat: MNDL_INT.PRG (of MNDL_FPU.PRG) het programma MNDL_INT.RSC de resource file MNDL_ENG.RSC engelstalige resource file MNDL_56K.LOD DSP-routine (voor de Falcon) MNDL_INT.TXT deze tekstfile MNDL_ICN.RSC kleur icoon voor Falcon DEF4.CLR standaard kleurpalet 4 kleuren DEF16.CLR standaard kleurpalet 16 kleuren BLUES16.CLR kleurpalet 16 kleuren RAINBOW.CLR " " " PINK.CLR " " " DEF256.CLR standaard kleurpalet 256 kleuren FIRESTRM.CLR kleurpalet 256 kleuren VOLCANO.CLR " " " CHROMA.CLR " " " NEON.CLR " " " BLUES.CLR " " " FULL3BIT.CLR chromatisch palet voor ST FULL4BIT.CLR chromatisch palet voor STE/TT FULL6BIT.CLR chromatisch palet voor Falcon SPIDER.MBP demofile (alleen parameters) SPIRAL.MBP " SPHERES.MBP " PEACOCK.MBP " NEED_FPU.MBP " ') DEADFROG.MBP " CURVES.MBP " MULTCOLR.MBP " OCTOPUS.MBP " ') OWL.MBP " GARLAND.MBP " ') VORTEX.MBP " SPLASH.MBP " en bij MNDL_FPU.PRG ook: V1CONVRT.TTP konversieprogramma voor V 1.xx parameterfiles. ') Geduld is een schone zaak .... De 256-kleuren paletten zijn gekonverteerd uit het MS-DOS public domain programma Fractint. Met dank aan Henk de Leeuw voor een aantal interessante plaatjes en suggesties. Mocht het programma onverhoopt niet zoals beschreven werken dan kunt U daarover naar onderstaand adres schrijven. Een gedeeltelijke source van dit programma (geschreven in Pure C en Pure Assembler van Application Systems Heidelberg, de opvolger van Turbo C) is samen met de laatste versie ervan bij de auteur verkrijgbaar tegen een vergoeding van f 25.-- (incl. diskette en verzendkosten) op giro 4443524 t.n.v.: R.J. Ridder, Mercuriusstraat 51, 7521 WR Enschede Holland. ---===<<<>>>===--- "WISKUNDIG AANHANGSEL". ====================== De Mandelbrot-verzameling kan het gemakkelijkst worden omschreven door gebruik te maken van complexe getallen. Complexe getallen vormen een uitbreiding van de re‰le getallen; daarvoor is een nieuw getal i gedefinieerd dat gelijk is aan de wortel uit -1 (bij re‰le getallen zijn wortels uit negatieve getallen een vergissing!). Elk complex getal bestaat uit een re‰el deel en een imaginair deel en kan worden geschreven als x + y * i. Wanneer y = 0 is het getal dus re‰el, zodat de verzameling re‰le getallen een deelverzameling van de verzameling complexe getallen is. Voor de complexe getallen zijn de rekenkundige bewerkingen gedefinieerd, waarbij natuurlijk elke i-kwadraat direkt door -1 wordt vervangen en dus een minteken oplevert. Voor de mandelbrot-verzameling hebben we nodig: c1 * c2 = (x1 + y1*i) * (x2 + y2*i) = x1*x2 + (x1*y2 + x2*y1)*i - y1*y2 = (x1*x2 - y1*y2) + (x1*y2 + x2*y1)*i en c1 + c2 = (x1 + y1*i) + (x2 + y2*i) = (x1 + x2) + (y1 + y2)*i; voor re‰le getallen levert dit weer de gebruikelijke re‰le resultaten op. De absolute waarde van een complex getal is gedefinieerd als de (re‰le!) wortel uit de som van de kwadraten van het re‰le en het imaginaire deel, dus |c| = |(x + yi)| = sqrt( x * x + y * y ). De complexe getallen kunnen eenvoudig grafisch worden weergegeven als een punt in een vlak, wat de gebruikte letters x en y hier al suggereren. De absolute waarde van een complex getal kan dan worden gezien als de afstand tot de oorsprong. De funktiereeks die voor de Mandelbrotfiguur wordt uitgerekend voegt aan elk punt c van het vlak een reeks getallen toe volgens: 2 f(c) = f(c) + c, met f(c) = 0, n n-1 0 2 2 2 dus 0, c, c + c, (c + c) + c, ... [ n: 0 1 2 3 ... ], waarbij natuurlijk de bovengenoemde formules moeten worden gebruikt voor het optellen en vermenigvuldigen (of kwadrateren) van complexe getallen. Voor het tekenen van de Mandelbrot-figuur wordt nu voor elk punt het aantal iteraties (de n uit bovenstaande formule) berekend dat nodig is voordat de nieuwste waarde van de reeks een absolute waarde heeft die groter is dan 2. Deze waarde wordt dan grafisch weergegeven als een kleur of grijstint. De getoonde waarde is dus de kleinste n waarvoor geldt: |c| > 2. Het is nu eenvoudig te zien dat buiten de cirkel met straal 2 om de oorsprong er geen verschillen meer zijn te verwachten: daar is het aantal iteraties altijd 1, omdat het uitgangspunt c al een absolute waarde groter dan 2 heeft. Iets dergelijks geldt voor de Julia-fractals, deze worden berekend met: 2 f(c) = f(c) + j, met f(c) = c, n n-1 0 2 2 2 2 2 2 dus c, c + j, (c + j) + j, ((c + j) + j) + j, ... [ n: 0 1 2 3 ... ], waarbij j de Julia-parameter is en c weer het punt in het beeldvlak. Voor elke j is er dus een andere fractal. De Mandelbrot-fractal kan worden opgevat als een soort overzicht (landkaart) van alle Julia-fractals: als j = c, is de Julia- reeks hetzelfde als die van Mandelbrot, maar ‚‚n plaats opgeschoven. De Mandelbrot-fractal geeft dus per punt aan wat de Julia-fractal van dat punt en toegepast op dat punt doet (ja, zijn we er nog ??!). Het komt bij hoge iteratiewaarden vaak voor dat de reeks periodiek is, dus dat f(c) = f(c) voor n > n , waarbij p de periode is. In dat geval is de reeks n n-p min konvergent, omdat de berekening zich dan steeds herhaalt en de limiet nooit overschreden wordt. Wanneer dit waarschijnlijk is (dus bij hoge iteratiewaarden) herkent het programma dit om de berekening dan af te breken en dus sneller te kunnen werken. WAT MINDER FORMEEL: als we een punt uit het vlak prikken en volgens de formules de reekswaarden berekenen zien we die reekswaarden als het ware in het vlak rondspringen; wanneer ‚‚n van die reekswaarden ook maar buiten de cirkel met een straal van 2 om de oorsprong valt zeggen we dat de reeks onbegrensd is en stoppen we met rekenen; het aantal reekswaarden dat we daarvoor hebben moeten uitrekenen geven we dan met een kleurtje aan op het uitgangspunt. Als we moe zijn van het berekenen van waarden zeggen we dat de reeks begrensd blijft en maken we het uitgangspunt zwart. Zo werken we alle punten van het vlak af, en het resultaat is de Mandelbrot-figuur. ---===<<<>>>===--- SNELHEIDSVERGELIJKING. De volgende tijden zijn bepaald met MNDL_INT 2.21 op de Atari computers en Fractint 17.2 op de PC's (met 'normale' (Super-)VGA-kaarten): Computer: Proc.: Clock: Test 1 Test 1A Test 2 Test 3 [MHz] [s] [s] [s] [s] Atari ST(E), Mega ST 68000 8 þ) þ) ý) þ) Atari Mega STE 68000 16 þ) þ) ý) þ) Atari TT (ST-Ram) 68030 32 15.84 15.84 4.18 10.03 Atari Falcon (CPU) 68030 16 29.46 29.46 6.34 15.84 Atari Falcon (DSP) 68030 16 7.99 7.99 1.97 5.19 PC 286/16 80286 16 57.23 19.83 11.54 26.69 PC 386/33 64k cache 80386 33 20.39 8.90 4.18 8.57 PC 486/33 256k cache 80486 33 14.67 7.25 2.97 5.43 PC 486/66 256k MCA 80486 66 7.52 3.68 1.48 2.85 Computer: Test 4 Test 4A Test 5 Test 6 Test 7 Test 8 [s] [s] [s] [s] [s] [s] Atari ST(E), Mega ST þ) þ) ý) ý) ý) þ) Atari Mega STE þ) þ) ý) ý) ý) þ) Atari TT (ST-Ram) 85.66 85.66 90.90 ý) ý) 618 Atari Falcon (CPU) 171.18 171.18 179.78 ý) ') 300000 Atari Falcon (DSP) 24.80 24.80 11.93 ý) ý) 120 PC 286/16 303.24 47.68 365.04 ý) ý) ') PC 386/33 64k cache ý) ý) ý) ý) ý) ') PC 486/33 256k cache 57.29 14.50 58.22 ý) ý) 181 PC 486/66 256k MCA 30.86 7.47 25.11 ý) ý) 91 ') Wordt ter oefening aan de lezer overgelaten :-) ... ý) Nog niet bekend. þ) Resolutie niet beschikbaar. Test 1: Resolutie 640 * 480 * 16 (TT medium). Domein X: -2.50 .. 1.50, Y: -1.50 .. 1.50 (standaard Fractint). 150 iteraties. Fractint in 2 pass mode. 16/24-bits berekening. Test 1A:Als test 1, maar Fractint in 'solid guessing' mode. Test 2: Resolutie 320 * 200 * 16 (ST low). Domein X: -2.50 .. 1.50, Y: -1.50 .. 1.50 (standaard Fractint). 150 iteraties. Fractint in 2 pass mode. 16/24-bits berekening. Test 3: Resolutie 320 * 480 * 256 (TT low). Domein X: -2.50 .. 1.50, Y: -1.50 .. 1.50 (standaard Fractint). 150 iteraties. 16/24-bits berekening. Fractint in 2 pass mode. Test 4: Resolutie 640 * 480 * 16 (TT medium). Domein X: -1 .. 0, Y: 0 .. 0.75, 150 iteraties (veel 'zwart'). 16/24-bits berekening. Fractint in 2 pass mode. Test 4A:Als test 4, maar Fractint in 'solid guessing' mode. Test 5: Resolutie 320 * 200 * 16 (ST low). Domein X: 0.2961038110 .. 0.2963082100 Y: -0.0171484500 .. -0.0169953648, 150 iteraties. 24/32-bits berekening. Ingewikkeld plaatje met veel 'ruis'. Fractint in 2 pass mode.'Solid guessing' heeft hier nauwelijks effekt. Test 6: Resolutie 320 * 200 * 16 (ST low). 32/48-bits berekening. Test 7: Resolutie 320 * 200 * 16 (ST low). 48-bits/floating point berekening. Test 8: Resolutie 640 * 480 * 256 (Falcon; TT in TT medium, 16 kleuren). Domein X: -0.1011980760 .. -0.1011978170 Y: -0.9563462273 .. -0.9563464215, 500 iteraties. 48-bits/floating point berekening. Het plaatje bij NEED_FPU.MBP. Opmerkingen: 1) De tekenmethode van het Atari programma is het beste te vergelijken met de 2-pass methode van Fractint: het is een multipass methode waarin alle punten worden berekend. Fractint's 'solid guessing' is een stuk sneller (zie test 1A en 4A), maar berekent niet alle punten en gaat daarmee wel eens de mist in. Erg 'solid' is die 'guessing' dus niet, bedoeld wordt: 'raden' naar 'vaste' vlakken in de tekening. (N.B.: de auteur weigert uit principe deze vieze truc in te bouwen, al is het op zich best te doen). Fractints 1-pass methode wint alleen een klein beetje tijd door het tekenwerk te beperken. 2) Het Atari programma gebruikt system calls voor de schermuitvoer, Fractint gebruikt zijn eigen schermroutines. Het laatste is wat sneller, maar voor elke nieuwe videokaart moet een nieuwe driver worden geschreven. 3) Bij de TT-testen is steeds de beeldschermversneller NVDI 2.01 gebruikt. Voor de Falcon testen is NVDI 2.5 gebruikt. Line-A is bij de Atari testen steeds ingeschakeld. 4) Het Atari programma werkt onder GEM, Fractint onder DOS. Fractint for Windows is zeker niet sneller en mist een aantal interessante opties (o.a. paletroteren). 5) De waarden voor de ST en Mega STE worden binnenkort bepaald. Gegevens over 486's op hogere kloksnelheden (50 of 66 MHz) zijn zeer welkom. Pentium bezitters meldt u! Konklusie van de auteur: Hoewel elk systeem en elke processor natuurlijk voor- en nadelen heeft kunnen beide programma's qua aanpak met elkaar vergeleken worden. De gemeten tijden vallen bij dezelfde resolutie uiteen in de tijdsduur voor het tekenen (min of meer vast) en voor het berekenen (afhankelijk van het domein). Het standaard plaatje is daarbij geen goede maat omdat daar relatief weinig bij gerekend hoeft te worden. Daarbij blijkt dat de snelheid van de gewone ST vergelijkbaar is met die van een 286, terwijl de TT ongeveer even snel is als een 386/33. Wanneer de DSP kan worden gebruikt (meestal) gaat het met de Falcon het snelst, sneller dan een zware 486, zeker als er stevig gerekend moet worden. Het Atari programma spendeert meer tijd aan het tekenwerk, maar dat maakt bij ingewikkelde plaatjes natuurlijk bijna niets meer uit. Konklusie voor de Atari-gebruiker: Als je afziet van het valsspelen met 'solid guessing' is een Atari ST al behoorlijk snel, en is de Falcon de snelste van het stel. Het is te zien dat de DSP berekening meer dan twee maal sneller is dan een 486/33, dus ook Fractint op een 486/66 partij moet kunnen geven. Het Atari programma is ook veel overzichte- lijker. Konklusie voor de PC-gebruiker: 'Solid guessing' werkt meestal heel behoorlijk, en daarmee blijkt maar weer dat er voor PC's altijd betere software beschikbaar is. Een DSP gebruiken, dat is pas valsspelen. Fractint is ook veel uitgebreider. ---===<<<>>>===--- Historie: 23/12/91: R 1.00. 5/ 4/92: R 1.10: -Rotatiesnelheid instelbaar; -32-bits berekening afdwingbaar; -Zwart/wit afdwingbaar (voor afdrukken plaatjes); -Vertaalbaar, alle tekst in de resource; -Programmafout (bij inzoomen soms geen beeld meer) verwijderd. 3/ 5/92: R 1.20: -Menubalk toegevoegd; -Animatie aanmaken toegevoegd; -Gecomprimeerd Degasformaat toegevoegd; -Maximale iteratiediepte vergroot; -Kleurbehandeling gewijzigd (geen invers meer); 14/ 5/92: R 1.21: -Verbeterde afdrukroutine; 30/ 5/92: R 1.30: -Verbeterde tekenroutine (+/- 2,5 keer zo snel!); -Versnelling bij herkenning konvergentie door periodiciteitstest; -Hoge resolutie afdrukroutine. 23/ 6/92: R 1.40: -Verder versnelde VDI/line-A tekenroutine; -Installatie als applikatie voor .MBP files mogelijk; -Precisie van integer-routines verhoogd; -Wisselen van schermen via VDI-routines uitgevoerd; -(X)IMG beeldformaat toegevoegd. 19/ 9/92: R 1.41: -Foutherstelling: folders met een punt in de naam kunnen nu ook worden gebruikt. 25/ 9/92: R 1.50: -Window voorzien van verplaatsbalk en schuifbalken; -Fout bij wisselen van filenamen hersteld; -Kompaktere (X)IMG files. 5/10/92: R 1.51: -Fout in herkenning spiegelbeelddeel hersteld; -Window behandeling verbeterd. 11/10/92: R 2.00: -Julia fractals toegevoegd; -Automatisch inladen van een standaard palet; -FPU parameterfiles nu echt compatible met emulatie; -Diverse verbeteringen. 25/10/92: R 2.01: -Multitos compatibiliteit door toetsenbordroutines via AES; -Verbeterde muisafhandeling. 14/11/92: R 2.02: -Animatie met vari‰rende Julia-parameters mogelijk; -Centrering van plaatje bij integer berekeningen. 30/ 3/93: R 2.10: -DSP routine voor Falcon; -True Color ondersteuning; -Engelse resourcefile; -Verbeterde paletten; -Verbetering van opslagformaat voor XIMG paletten; -Diverse kleine verbeteringen. R 2.11: -Kleine verbeteringen. 30/ 6/93: R 2.20: -48-bits DSP berekening toegevoegd, 5 maal sneller dan 32-bits berekening en 250 maal sneller dan floating point emulatie; -24-bits DSP routine 15% sneller (alleen merkbaar bij zware berekening); -Floating point emulatie routine 5% sneller; -Julia parameter muis-selektie toegevoegd; -Iteraties tot 65500 i.p.v. 32500 mogelijk; -Fout in windowbehandeling verwijderd; -Verspringen bij inzoomen ‚n overgang naar hogere berekeningsmethode verholpen; -Automatisch herstellen van het palet bij omschakelen naar een andere applikatie mogelijk; -Gebruiken van grotere paletten dan het aantal zichtbare kleuren mogelijk (voor paletroteren). 26/ 7/1993: R 2.21: -Fout uit palet TRUECOLR.CLR verwijderd; -Kleine aanpassingen aan NVDI 2.5, met name in True Color: 'True color' (geen hardware paletregisters) wordt nu aangenomen vanaf 32K kleuren; -Diverse kleine verbeteringen. 1/11/1993: R 2.25: -keuze XIMG kleuren in tos- of vdi-volgorde toegevoegd; -duochroom tekenmogelijkheid toegevoegd; -animatie-programma toegevoegd. R 2.26: -Foutje in R. 2.25 bij paletroteren met meer dan 16 11/11/1993: kleuren verbeterd. Enschede, 26- 7-1993.