home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0600
/
CCE_0651.ZIP
/
CCE_0651.PD
/
MNDL_INT.226
/
MNDL_INT.TXT
< prev
next >
Wrap
Text File
|
1993-11-12
|
44KB
|
738 lines
[ 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.