Difference between revisions of "User:Zeracles/Background/Code/Stars"

From Ultronomicon
Jump to navigation Jump to search
m
m (SCDB move)
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
  %background.m
 
  %background.m
 
  %by Anthony Smith (Zeracles); astroant@hotmail.com, asmith@physics.usyd.edu.au, http://www.physics.usyd.edu.au/~asmith/, http://wiki.uqm.stack.nl/User:Zeracles
 
  %by Anthony Smith (Zeracles); astroant@hotmail.com, asmith@physics.usyd.edu.au, http://www.physics.usyd.edu.au/~asmith/, http://wiki.uqm.stack.nl/User:Zeracles
  %see http://starcontrol.classicgaming.gamespy.com/forum/index.php?topic=1660.0
+
  %see http://www.star-control.com/forum/index.php/topic,1660.0.html
 
  %nice stellar geometry can be obtained with anglemagnificationbase=0.5;anglemagnificationindex=5;anglecutoffradiusfactor=1;
 
  %nice stellar geometry can be obtained with anglemagnificationbase=0.5;anglemagnificationindex=5;anglecutoffradiusfactor=1;
 
   
 
   
Line 30: Line 30:
 
  plotimage=1;
 
  plotimage=1;
 
   
 
   
  xposns=xmin+(xmax-ymin)*rand(n,1);
+
  xposns=xmin+(xmax-xmin)*rand(n,1);
 
  yposns=ymin+(ymax-ymin)*rand(n,1);
 
  yposns=ymin+(ymax-ymin)*rand(n,1);
 
   
 
   
Line 44: Line 44:
 
   
 
   
 
  for i=linspace(1,n,n)
 
  for i=linspace(1,n,n)
i
+
  i
 
   
 
   
xposn=xposns(i);
+
  xposn=xposns(i);
yposn=yposns(i);
+
  yposn=yposns(i);
 
   
 
   
radius=((exp(rand(1)))*14-0.01)/2;
+
  radius=((exp(rand(1)))*14-0.01)/2;
intensity=2*rand(1);
+
  intensity=2*rand(1);
 
   
 
   
redness=rand(1);
+
  redness=rand(1);
greenness=rand(1);
+
  greenness=rand(1);
blueness=rand(1);
+
  blueness=rand(1);
 
 
 
 
spokeprobability=rand(1);
+
  spokeprobability=rand(1);
 
   
 
   
spokeswitch=spokeprobability>spokethreshold;
+
  spokeswitch=spokeprobability>spokethreshold;
 
   
 
   
spokeangleoffset=pi/4;
+
  spokeangleoffset=pi/4;
 
 
 
 
 
         ygaussiancontribution=[];
 
         ygaussiancontribution=[];
Line 67: Line 67:
 
                 xgaussiancontribution=[];
 
                 xgaussiancontribution=[];
 
                 for gridypixel=linspace(1,numypix,numypix)
 
                 for gridypixel=linspace(1,numypix,numypix)
                        gridyposn=ymin+(gridypixel-1)*(yextent)/(numypix-1);
+
                      gridyposn=ymin+(gridypixel-1)*(yextent)/(numypix-1);
 
 
 
 
 
  xdiff=xposn-gridxposn;
 
  xdiff=xposn-gridxposn;
 
  ydiff=yposn-gridyposn;
 
  ydiff=yposn-gridyposn;
 
 
 
 
                        distance=((xdiff)^2+(ydiff)^2)^(1/2);
+
                      distance=((xdiff)^2+(ydiff)^2)^(1/2);
 
  distancefactor=distance/radius;
 
  distancefactor=distance/radius;
 
  if distancefactor>cutoffradiusfactor
 
  if distancefactor>cutoffradiusfactor
Line 92: Line 92:
 
  end
 
  end
 
  end
 
  end
                        xgaussiancontribution=[xgaussiancontribution;littlexgaussiancontribution];
+
                      xgaussiancontribution=[xgaussiancontribution;littlexgaussiancontribution];
 
                 end
 
                 end
 
                 ygaussiancontribution=[ygaussiancontribution,xgaussiancontribution];
 
                 ygaussiancontribution=[ygaussiancontribution,xgaussiancontribution];
Line 98: Line 98:
 
         gaussiancontribution=intensity*ygaussiancontribution;
 
         gaussiancontribution=intensity*ygaussiancontribution;
 
   
 
   
redmap=redmap+gaussiancontribution*redness;
+
  redmap=redmap+gaussiancontribution*redness;
 
         greenmap=greenmap+gaussiancontribution*greenness;
 
         greenmap=greenmap+gaussiancontribution*greenness;
 
         bluemap=bluemap+gaussiancontribution*blueness;
 
         bluemap=bluemap+gaussiancontribution*blueness;

Latest revision as of 03:42, 17 September 2009

See also this quick download

%background.m
%by Anthony Smith (Zeracles); astroant@hotmail.com, asmith@physics.usyd.edu.au, http://www.physics.usyd.edu.au/~asmith/, http://wiki.uqm.stack.nl/User:Zeracles
%see http://www.star-control.com/forum/index.php/topic,1660.0.html
%nice stellar geometry can be obtained with anglemagnificationbase=0.5;anglemagnificationindex=5;anglecutoffradiusfactor=1;

n=800;
resolution=1;

xmin=0;
xmax=1600;
ymin=0;
ymax=1200;

xextent=xmax-xmin;
yextent=ymax-ymin;

numxpix=round((xextent)/resolution);
numypix=round((yextent)/resolution);

spokethreshold=0;
spokes=4;
anglemagnificationbase=0.5;
anglemagnificationindex=5;

cutoffradiusfactor=4;
anglecutoffradiusfactor=1;

plotposns=1;
plotimage=1;

xposns=xmin+(xmax-xmin)*rand(n,1);
yposns=ymin+(ymax-ymin)*rand(n,1);

if plotposns==1
	figure
	box on
	plot(xposns,yposns,'k.')
end

redmap=zeros(numypix,numxpix);
greenmap=zeros(numypix,numxpix);
bluemap=zeros(numypix,numxpix);

for i=linspace(1,n,n)
	  i

	  xposn=xposns(i);
	  yposn=yposns(i);

	  radius=((exp(rand(1)))*14-0.01)/2;
	  intensity=2*rand(1);

	  redness=rand(1);
	  greenness=rand(1);
	  blueness=rand(1);
	
	  spokeprobability=rand(1);

	  spokeswitch=spokeprobability>spokethreshold;

	  spokeangleoffset=pi/4;
	
        ygaussiancontribution=[];
        for gridxpixel=linspace(1,numxpix,numxpix)
                gridxposn=xmin+(gridxpixel-1)*(xextent)/(numxpix-1);
                xgaussiancontribution=[];
                for gridypixel=linspace(1,numypix,numypix)
                      gridyposn=ymin+(gridypixel-1)*(yextent)/(numypix-1);
				
			xdiff=xposn-gridxposn;
			ydiff=yposn-gridyposn;
				
                      distance=((xdiff)^2+(ydiff)^2)^(1/2);
			distancefactor=distance/radius;
			if distancefactor>cutoffradiusfactor
				littlexgaussiancontribution=0;
			end
			if distancefactor<=cutoffradiusfactor
                                littlexgaussiancontribution=exp(-1*(distance^2)/(2*radius^2));
					if spokeswitch==1
						anglesweep=2*pi/spokes;
						angle=atan(ydiff/xdiff);
						correctedangle=angle-spokeangleoffset;
						angledisplacementnumber=round((correctedangle)/(anglesweep));
						angledisplacement=abs((correctedangle)-angledisplacementnumber*(anglesweep));
						anglemagnification=anglemagnificationbase+(1-anglemagnificationbase)*((1-anglecutoffradiusfactor*distancefactor*(angledisplacement*(anglesweep/2))))^anglemagnificationindex;
						if anglemagnification<0
							anglemagnification=0;
						end
						littlexgaussiancontribution=littlexgaussiancontribution*anglemagnification;
					end
			end
                      xgaussiancontribution=[xgaussiancontribution;littlexgaussiancontribution];
                end
                ygaussiancontribution=[ygaussiancontribution,xgaussiancontribution];
        end
        gaussiancontribution=intensity*ygaussiancontribution;

	  redmap=redmap+gaussiancontribution*redness;
        greenmap=greenmap+gaussiancontribution*greenness;
        bluemap=bluemap+gaussiancontribution*blueness;
end

excessmask=redmap>1;
redmap=redmap-excessmask.*(redmap-1);

excessmask=greenmap>1;
greenmap=greenmap-excessmask.*(greenmap-1);

excessmask=bluemap>1;
bluemap=bluemap-excessmask.*(bluemap-1);

backgroundmap=cat(3,redmap,greenmap,bluemap);

if plotimage==1
	figure
	box on
	image(backgroundmap)
end