Rotation af billeder stiller store krav til computerens effektivitet, ydermere, når det skal gøres så mange gange. Det er nu næsten muligt at lave en simulator, der efterligner VF i realtime, dog med en begrænset opløsning. En interaktiv simulator kan benyttes til at afdække forskellige parameterområder. Men det størte overblik opnår man ved, at samle simulationsforløb i diagrammer. Jeg har lavet et program i Turbo-Pascal på PC samt et i IDL (Interactive Data Language) på Unix. Programmerne, arbejder efter nogen optimering kun 10-20 gange langsommere end det analoge system (ved en opløsning på 100x100 pixels). De to systemer har hver deres fordele og ulemper.
Optimering af algoritmen:
Beregningstiden er helt klart en afgørende faktor for hvor langt man kan nå med simulationerne. Først og fremmest er der billedets opløsning.
Den næste vigtige faktor er beregningen af det roterede billede. Ved at bruge en rotationsmatrix til at bestemme placeringen af et punkt i det nye billede skal man beregne cosinus og sinus til vinklen ialt 4 gange.
Det har derfor stor betydning, om man skal udføre beregningerne hver gang eller om man kan bruge resultatet igen. Da vinklen som regel er fast over længere forløb, kan dette undgås. Man vinder mindst en faktor 10 ved at sætte beregningen af de trigonometriske funktioner uden for løkken.
En yderligere væsentlig optimering kan ske ved at forudberegne hele transformationen, for en given værdi af vinkel og zoom, og lægge det ind i en lookup-tabel. Der skal så beregnes en koordinatvektor for flytningen af ethvert punkt i det gamle billede til et punkt i det nye. Disse nye pixelkoordinater vil ikke være heltallige, og gemmes derfor som reelle tal. Den reelle del kan bruges til en bedre bestemmelse af intensiteten i det nye punkt ved at tage et vægtet gennemsnit af de 4 pixels, som pixelen med de reelle koordinater vil overlappe. Vægtene bestemmes ud fra overlappet. Man gør i praksis det omvendte: For hver pixel i det nye billede, beregner man bidragene fra de (4) pixels i det gamle billede, som rotationen bestemmer.
Unix-programmet (Se appendix A):
I IDL (Interactive Data Language) er det meget nemt at programmere grafiske funktioner og anvende arrays. Der er f.eks. en indbygget roter-funktion: ROT, som skal have vinkel og zoom-faktor som input sammen med billedet man skal rotere. Her er også mulighed for en automatisk "smoothing", der udjævner billedet. Dette anvendes som diffusionen i modellens 2. led.
En kort beskrivelse: Skærmbilledet holdes i et 2-dimensionalt array: Screen. Skærmen "aflæses" af kameraet, og roteres, hvorefter det lægges i et andet array: Cam. Dér tilføjes lyset fra punktlyskilden samt eftergløden fra tre foregående billeder. Billedet blændes ned, og eventuelle punkter der, efter sammenlægningen, overstiger maximumværdien "klippes" af. Dette modsvarer mætning af apparaterne. Billederne omordnes før processen gentages. Med dette program, har jeg lavet den første simulation med en "punktlyskilde".
PC-programmet (Se appendix B): Dette program har langt flere af de detaljer med, som blev beskrevet under optimeringen. Efter den noget besværlige grafikopstart og initialisering af billederne B1, B2 og B3, forudberegnes de trigonometriske funktioner for vinklen og transformation af vinkel og zoom. Herefter fordeles billederne på skærmen efter værdierne af zoom og vinkel. De centrale beregninger foregår i "ROTB"-proceduren. Først beregnes det roterede billede fra B2 til B3. Derefter kan sammenlægningen af det roterede billede (med udjævning på 4 pixels) og eftergløden af de to foregående billeder beregnes. Til sidst omordnes billederne. Startbilledet kan i princippet være vilkårligt. I programmet kaldes proceduren "Flamme", der sætter en lodret pind på 11 pixels, hver gang en ny parameterindstilling er sat.
På PC har jeg haft større frihed til at lave interaktive funktioner. Man kan nemt udbygge programmet med taster for ændring af vinkel, zoom o.s.v. Det har jeg allerede gjort i en anden version. Her kan man også styre punktlyskilden med musen, og ændre paletter til "falske farver" der kan fremhæve detaljer der ellers ville være utydelige.