//JS pseudo TurboPascal simulator script //program fbv_demo; {Lutz Tautenhahn (c) 1995, 1999)} var wmaxi=81; var x0=230; var y0=20; var MaxRekTiefe=5; var MaxPufferSchranke=35; var KritischeHelligkeit=100; var FormatSubF= [[ 0, 0, 0, 0, 0, 0, 0, 0, 0], //line added to get [0..8, 0..8] [ 1, 1, 0, 0, 0, 0, 0, 0, 0], [ 1, 1, 1, 0, 0, 0, 0, 0, 0], [ 4, 4, 0, 0, 0, 0, 0, 0, 0], [ 1, 4, 4, 3, 0, 0, 0, 0, 0], [ 4, 1, 1, 2, 4, 4, 0, 0, 0], [ 4, 4, 4, 0, 0, 0, 0, 0, 0], [ 1, 4, 4, 3, 1, 1, 0, 0, 0], [ 1, 4, 4, 3, 1, 1, 1, 2, 2]]; //[1..8, 0..8] (was original array) var i, j, from, ip, TempKrH;//: integer; var imin, jmin, imax, jmax;//: longint; var K, Format, MaxPuffer;//: shortint; var Puffer=[];//: array [0..MaxPufferSchranke] of integer; var H=[];//: array[0..3] of integer; var BinFarbe=[];//: array[0..1] of integer; var w=[];//: array[0..wmaxi] of byte; var graphdriver,graphmode;//: integer; var wmax,dx1,dy1,dx2,dy2,dx3,dy3;//: integer; var i1,i2,i3,j1;//: integer; var key;//: char; function Helligkeit(ii) { if (ii==0) return(H[0]); if (ii==8) return(H[1]); if (ii==7) return(H[2]); if (ii==15) return(H[3]); return(0); } function cantor(iix,iiy,iiz) { var triad=[[],[],[],[]]; //: array[1..3,0..6] of byte; var tt=[]; //: array[0..6] of integer; var cc=[]; //: array[1..3] of integer; var ii,jj; //: integer; tt[0]=1; tt[1]=3; tt[2]=9; tt[3]=27; tt[4]=81; tt[5]=243; tt[6]=729; cc[1]=iix;cc[2]=iiy;cc[3]=iiz; for (jj=1; jj<=3; jj++) { for (ii=6; ii>=0; ii--) { if (cc[jj]>=2*tt[ii]) { cc[jj]=cc[jj]-2*tt[ii]; triad[jj][ii]=2; } else if (cc[jj]>=tt[ii]) { cc[jj]=cc[jj]-tt[ii]; triad[jj][ii]=1; } else triad[jj][ii]=0; } } for (ii=0; ii<=6; ii++) { jj=0; if (triad[1][ii]==1) jj++; if (triad[2][ii]==1) jj++; if (triad[3][ii]==1) jj++; if (jj>1) return(false); } return(true); } function wuerfel(ii,jj) { var ii1; setcolor(15); for (ii1=1; ii1<=dx1; ii1++) line(ii-ii1,jj,ii-dx3-ii1,jj-dy3); setcolor(7); for (ii1=1; ii1<=dy2; ii1++) line(ii,jj+ii1,ii-dx3,jj-dy3+ii1); setcolor(8); for (ii1=1; ii1<=dx1; ii1++) line(ii-ii1,jj,ii-ii1,jj+dy2); } function FormatAnalyse(ii,jj) { var kki, kkj, iik, jjk; var ppotenz3i, ppotenz3j; ppotenz3i=1; iik=1; kki=-1; while (ii>=ppotenz3i) { ppotenz3i=ppotenz3i*3; kki++; } iik=Math.floor((3*ii)/ppotenz3i); ppotenz3j=1; jjk=1; kkj=-1; while (jj>=ppotenz3j) { ppotenz3j=ppotenz3j*3; kkj++; } jjk=Math.floor((3*jj)/ppotenz3j); if (kki>kkj) { if (iik==1) Format=1 else Format=2; K=kki; } else if (kki=2; ip--) Puffer[ip]=Puffer[ip-1]; Puffer[1]=0; if ((i<=imax)&&(j<=jmax)) { Puffer[1]=Helligkeit(getpixel(i,j)); Puffer[0]=Puffer[0]+Puffer[1]; if (Puffer[0]=1; ip--) { TempKrH=KritischeHelligkeit; //{LT 2003: Seems this must be done 1 line above!} if (Puffer[ip]0) { if (Richtung==1) { Go(1, Tiefe-1); Go(4, Tiefe-1); Go(4, Tiefe-1); Go(3, Tiefe-1); Go(1, Tiefe-1); Go(1, Tiefe-1); Go(1, Tiefe-1); Go(2, Tiefe-1); Go(2, Tiefe-1); } if (Richtung==2) { Go(3, Tiefe-1); Go(3, Tiefe-1); Go(2, Tiefe-1); Go(2, Tiefe-1); Go(2, Tiefe-1); Go(4, Tiefe-1); Go(1, Tiefe-1); Go(1, Tiefe-1); Go(2, Tiefe-1); } if (Richtung==3) { Go(3, Tiefe-1); Go(2, Tiefe-1); Go(2, Tiefe-1); Go(1, Tiefe-1); Go(3, Tiefe-1); Go(3, Tiefe-1); Go(3, Tiefe-1); Go(4, Tiefe-1); Go(4, Tiefe-1); } if (Richtung==4) { Go(1, Tiefe-1); Go(1, Tiefe-1); Go(4, Tiefe-1); Go(4, Tiefe-1); Go(4, Tiefe-1); Go(2, Tiefe-1); Go(3, Tiefe-1); Go(3, Tiefe-1); Go(4, Tiefe-1); } } else { Bildverarbeitung(i, j); if (Richtung==1) { if (from<=2) i++; else j++; } if (Richtung==2) { if (from<=2) j--; else i--; } if (Richtung==3) { if (from<=2) j--; else i--; } if (Richtung==4) { if (from<=2) i++; else j++; } from=Richtung; } } function work() { var ff; imin=0; jmin=0; imax=640; jmax=480; FormatAnalyse(imax-imin, jmax-jmin); i=imin; j=jmin; from=1; for (ff=0; ff<=MaxPuffer; ff++) Puffer[ff]=0; for (ff=0; ff<=8; ff++) Go(FormatSubF[Format][ff],K); } function run() { if (nreadln<1) { writeln('Demonstrations-Programm zur fraktalen Bildverareitung LT 1995'); writeln(''); writeln('Das Programm zeichnet als Urbild den Menger-Schwamm in 4 Graustufen.'); writeln('Anschliessend wird das Bild binarisiert, d.h. es wird auf 2 Farbstufen'); writeln('reduziert. Die Bildverarbeitung erfolgt entlang eines fraktalen Weges.'); writeln(''); writeln(''); write('Helligkeitswert fuer schwarz [0..100] (0) ');readln('H[0]');return; } if (nreadln<2) { H[0]=parseInt(H[0]); if (isNaN(H[0])) H[0]=0; write('Helligkeitswert fuer dunkelgrau [0..100] (33) ');readln('H[1]');return; } if (nreadln<3) { H[1]=parseInt(H[1]); if (isNaN(H[1])) H[1]=33; write('Helligkeitswert fuer hellgrau [0..100] (67) ');readln('H[2]');return; } if (nreadln<4) { H[2]=parseInt(H[2]); if (isNaN(H[2])) H[2]=67; write('Helligkeitswert fuer weiss [0..100] (100) ');readln('H[3]');return; } if (nreadln<5) { H[3]=parseInt(H[3]); if (isNaN(H[3])) H[3]=100; writeln; write('Binaerfarbe fuer dunkel [0..15] (0) ');readln('BinFarbe[0]');return; } if (nreadln<6) { BinFarbe[0]=parseInt(BinFarbe[0]); if (isNaN(BinFarbe[0])) BinFarbe[0]=0; write('Binaerfarbe fuer hell [0..15] (15) ');readln('BinFarbe[1]');return; } if (nreadln<7) { BinFarbe[1]=parseInt(BinFarbe[1]); if (isNaN(BinFarbe[1])) BinFarbe[1]=15; writeln(''); write('Pufferlaenge fuer Verarbeitungstiefe [3..'+MaxPufferSchranke+'] (9) '); readln('MaxPuffer');return; } if (nreadln<8) { MaxPuffer=parseInt(MaxPuffer); if (isNaN(MaxPuffer)) MaxPuffer=9; writeln(''); write('Eingabe der Stufe des Menger- Schwammes [1...4] (2) '); readln('key');return; } if (nreadln<9) { if ((key=='1')||(key=='2')||(key=='2')||(key=='4')); else key='2'; if (key=='1'){wmax=3;dx1=120;dy1=0;dx2=0;dy2=120;dx3=-30;dy3=30;} if (key=='2'){wmax=9;dx1=40;dy1=0;dx2=0;dy2=40;dx3=-10;dy3=10;} if (key=='3'){wmax=27;dx1=12;dy1=0;dx=0;dy2=12;dx3=-3;dy3=3;} if (key=='4'){wmax=81;dx1=4;dy1=0;dx2=0;dy2=4;dx3=-1;dy3=1;} initgraph(); for (i1=0;i1=0; i2--) { for (i3=0; i3