POV-Ray : Newsgroups : povray.general : FEATURE REQUEST: MS Notepad text editing keystroke definitions : Re: FEATURE REQUEST: MS Notepad text editing keystroke definitions Server Time
12 Aug 2024 11:17:43 EDT (-0400)
  Re: FEATURE REQUEST: MS Notepad text editing keystroke definitions  
From: Margus Ramst
Date: 29 Mar 1999 14:43:21
Message: <36ffd7d9.0@news.povray.org>
Nieminen Mika wrote in message <36ffc3bb.0@news.povray.org>...

/.../
>  Can you tell me without editing this code what does it do?
>

Easy. It's your plasma macro :)

Margus

>#macro Random(Seed,Mid,Var) #local r=rand(Seed); #local lo=Mid-Var/2;
#local
>hi=lo+Var; #if(lo<0) #local lo=0; #end #if(hi>MaxVal) #local hi=MaxVal;
#end
>lo+r*(hi-lo) #end #macro CreatePlasmaArray(XSize,YSize,MaxVal,Seed)
#declare
>PCoord=array[XSize][YSize] #local R=seed(Seed); #local Div=2; #declare
PCoord
>[0][0]=Random(R,MaxVal/2,MaxVal); #while(Div/2<=XSize | Div/2<=YSize)
#local
>j=0; #while(j<Div) #local X=div(XSize*j,Div); #local Y=div(YSize*j,Div);
>#local i=1; #while(i<Div) #local X1=div(XSize*(i-1),Div); #local
X2=div(XSize
>*(i+1),Div); #if(X2>X1+1) #local Xm=div(XSize*i,Div); #local
C1=PCoord[X1][Y];
>#local C2=PCoord[mod(X2,XSize)][Y]; #declare
PCoord[Xm][Y]=Random(R,(C1+C2)/2,
>X2-X1); #end #local Y1=div(YSize*(i-1),Div); #local
Y2=div(YSize*(i+1),Div);
>#if(Y2>Y1+1) #local Ym=div(YSize*i,Div); #local C1=PCoord[X][Y1]; #local
C2=
>PCoord[X][mod(Y2,YSize)]; #declare PCoord[X][Ym]=Random(R,(C1+C2)/2,Y2-Y1);
>#end #local i=i+2; #end #local j=j+2; #end #local j=1; #while(j<Div) #local
>Y=div(YSize*j,Div); #local Y1=div(YSize*(j-1),Div); #local
Y2=div(YSize*(j+1),
>Div); #if(Y2>Y1+1) #local i=1; #while(i<Div) #local X=div(XSize*i,Div);
#local
>X1=div(XSize*(i-1),Div); #local X2=div(XSize*(i+1),Div); #if(X2>X1+1)
#local
>C1=PCoord[X1][Y]+PCoord[mod(X2,XSize)][Y]+PCoord[X][Y1]+PCoord[X][mod(Y2,YS
ize
>)]; #declare PCoord[X][Y]=Random(R,C1/4,(X2-X1+Y2-Y1)/2); #end #local
i=i+2;
>#end #end #local j=j+2; #end #local Div=Div*2; #end #end #macro
CreatePlasma
>(XSize,YSize,Roughness,Seed) #if(XSize<=1 | YSize<=1) #error "XSize and
YSize
>must be greater than 1" #end #if(Roughness<0) #warning "Roughness should be
>greater than 0\n" #end #local MaxVal=Roughness*(XSize+YSize)/2;
>CreatePlasmaArray(XSize,YSize,MaxVal,Seed) #local IndY=0;
#while(IndY<YSize)
>#local IndX=0; #while(IndX<XSize)
PlasmaObject(IndX/(XSize-1),IndY/(YSize-1),
>PCoord[IndX][IndY]/MaxVal) #local IndX=IndX+1; #end #local IndY=IndY+1;
#end
>#end
>
>
>--
>main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
>):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.