| julia 
 
Strict
Framework BRL.GlMax2D
Import BRL.System
Import BRL.Basic
Import BRL.Retro
Import BRL.Max2D
Graphics 640,480
' Simple Program To Display The Julia Set
Global CX:Double = .344999
Global CY:Double = .074999
Global CCycle:Byte = False
Global in:Byte = False
Global colors:Int[,] = Null
createColors(0)
Global iwidth:Int = 320
Global iheight:Int = 240
Global isize:Int = 3
Cls
While Not KeyHit(KEY_ESCAPE)
	SetBlend(ALPHABLEND)
	SetRotation(0)
	SetColor(0,0,0)
	SetAlpha(.05)
	DrawRect(0,0,800,600)
	SetAlpha(1)
	
	If KeyHit(KEY_1)
		createColors(0)
	ElseIf KeyHit(KEY_2)
		createColors(1)
	ElseIf KeyHit(KEY_3)
		createColors(2)
	EndIf
	
	If KeyHit(KEY_TAB)
		CCycle = Not CCycle
	EndIf
	If KeyHit(KEY_SPACE)
		in = Not in
	EndIf
	
	colorCycle()
	If KeyDown(KEY_RIGHT)
		CX:+.0005
	Else If KeyDown(KEY_LEFT)
		CX:-.0005
	EndIf
	If KeyDown(KEY_DOWN)
		CY:+.0005
	Else If KeyDown(KEY_UP)
		CY:-.0005
	EndIf
	
	If Not in Then
		outJulia(CX,CY,iwidth,iheight,24,isize,-iwidth/2,-iheight/2)
	Else
		inJulia(CX,CY,iwidth/2,iheight/2,24,isize+1)
	EndIf 
	
	
	SetColor(0,0,0)
	DrawText("CX="+CX+" CY="+CY,12,12)
	DrawText("TAB - Toggle Color Cycle",12,27)
	DrawText("SPACE - Toggle IN/OUT Set",12,42)
	DrawText("1,2,3 - Select Color Set",12,57)
	DrawText("UP/DOWN - Change CY",12,72)
	DrawText("LEFT/RIGHT - Change CX",12,87)
	
	SetColor(255,255,255)
	DrawText("CX="+CX+" CY="+CY,10,10)
	DrawText("TAB - Toggle Color Cycle",10,25)
	DrawText("SPACE - Toggle IN/OUT Set",10,40)
	DrawText("1,2,3 - Select Color Set",10,55)
	DrawText("UP/DOWN - Change CY",10,70)
	DrawText("LEFT/RIGHT - Change CX",10,85)
	
	Flip 
Wend
Function colorCycle()
	If CCycle=False Then Return
	Local cc:Int = colors.dimensions()[0]
	Local r:Int = colors[cc-1,0]
	Local g:Int = colors[cc-1,1]
	Local b:Int = colors[cc-1,2]
	For Local i:Int=cc-1 Until 0 Step -1
		colors[i,0]=colors[i-1,0]
		colors[i,1]=colors[i-1,1]
		colors[i,2]=colors[i-1,2]
	Next
	colors[0,0]=r
	colors[0,1]=g
	colors[0,2]=b
End Function
Function createColors(set:Byte)
	Select(set)
	Case 0
	'Rem grey shades
	'------------------------------------
	colors=New Int[256,3]
	For Local ci:Int = 0 Until 256
		colors[ci,0]=ci
		colors[ci,1]=ci
		colors[ci,2]=ci
	Next
	'EndRem
	Case 1
	'Rem darks to lights
	'------------------------------------
	colors=New Int[768,3]
	For Local ci:Int = 0 Until 256
		colors[ci,0]=ci
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=ci
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=ci
	Next
	'EndRem
	Case 2
	'Rem mid to light to mid
	'------------------------------------
	colors=New Int[768,3]
	For Local ci:Int = 0 Until 128
		colors[ci,0]=ci+128
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=ci+128
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=ci+128
	Next
	For Local ci:Int = 128 Until 256
		colors[ci,0]=256-ci+128
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=256-ci+128
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=256-ci+128
	Next
	'EndRem
	End Select
End Function
Function inJulia(CX:Double,CY:Double,WIDTH:Int,HEIGHT:Int,Detail:Int,size:Int,xoff:Int=0,yoff:Int=0)
	SetOrigin(xoff,yoff)
	Local HALF_WIDTH:Double = WIDTH/2
	Local HALF_HEIGHT:Double = HEIGHT/2
	Local QUAR_WIDTH:Double = WIDTH/4
	Local QUAR_HEIGHT:Double = HEIGHT/4
	For Local PixelY:Int = 0 To HEIGHT
		For Local PixelX:Int = 0 To WIDTH
		    	Local ZX:Double = ((PixelX - HALF_WIDTH) / QUAR_WIDTH)
		    	Local ZY:Double = ((PixelY - HALF_HEIGHT) / QUAR_HEIGHT)
		    	For Local i:Int = 0 To Detail
			      	Local NewZX:Double = (ZX * ZX) - (ZY * ZY) + CX
			      	Local NewZY:Double = ((2 * ZX) * ZY) + CY
			      	ZX = NewZX
			      	ZY = NewZY
					Local DISTANCE:Double = (ZX*ZX) + (ZY*ZY)
			      	If DISTANCE > 4 Then 
						DISTANCE=4/DISTANCE * (colors.dimensions()[0]-1)
						SetColor(colors[DISTANCE,0],colors[DISTANCE,1],colors[DISTANCE,2])
						DrawRect((pixelx)*size,(pixely)*size,size,size)
						Exit ' Go to nextpoint
					EndIf
	    		Next
		Next 
	Next
	SetOrigin(0,0)
End Function
Function outJulia(CX:Double,CY:Double,WIDTH:Int,HEIGHT:Int,Detail:Int,size:Int,xoff:Int=0,yoff:Int=0)
	SetOrigin(xoff,yoff)
	Local HALF_WIDTH:Double = WIDTH/2
	Local HALF_HEIGHT:Double = HEIGHT/2
	Local QUAR_WIDTH:Double = WIDTH/4
	Local QUAR_HEIGHT:Double = HEIGHT/4
	For Local PixelY:Int = 0 To HEIGHT
		For Local PixelX:Int = 0 To WIDTH
		    	Local ZX:Double = (PixelX - HALF_WIDTH) / QUAR_WIDTH
		    	Local ZY:Double = (PixelY - HALF_HEIGHT) / QUAR_HEIGHT
				Local DISTANCE:Double = 0 
			    For Local i:Int = 0 To Detail
			      	Local NewZX:Double = (ZX * ZX) - (ZY * ZY) + CX
			      	Local NewZY:Double = ((2 * ZX) * ZY) + CY
			      	ZX = NewZX
			      	ZY = NewZY
					DISTANCE = (ZX*ZX) + (ZY*ZY)
			      	If DISTANCE > 4 Then Exit ' Go to nextpoint
	    		Next
			If DISTANCE<4 Then
				If DISTANCE>1 Then DISTANCE=1
				DISTANCE=DISTANCE * (colors.dimensions()[0]-1)
				SetColor(colors[DISTANCE,0],colors[DISTANCE,1],colors[DISTANCE,2])
				DrawRect(pixelx*size,pixely*size,size,size)
			EndIf
		Next 
	Next
	SetOrigin(0,0)
End Function
 Mandelbrot
 
 
Strict
Framework BRL.GlMax2D
Import BRL.System
Import BRL.Basic
Import BRL.Retro
Import BRL.Max2D
Graphics 640,480
' Simple Program To Display The Julia Set
'Global CX:Double = .344999
'Global CY:Double = .074999
Global CX:Double = 0
Global CY:Double = 0
Global CCycle:Byte = False
Global in:Byte = False
Global colors:Int[,] = Null
Global scale:Double = .02
createColors(0)
Global iwidth:Int = 320
Global iheight:Int = 240
Global isize:Int = 3
Cls
While Not KeyHit(KEY_ESCAPE)
	SetBlend(ALPHABLEND)
	SetRotation(0)
	SetColor(0,0,0)
	SetAlpha(.05)
	DrawRect(0,0,800,600)
	SetAlpha(1)
	
	If KeyHit(KEY_1)
		createColors(0)
	ElseIf KeyHit(KEY_2)
		createColors(1)
	ElseIf KeyHit(KEY_3)
		createColors(2)
	EndIf
	
	If KeyHit(KEY_TAB)
		CCycle = Not CCycle
	EndIf
	If KeyHit(KEY_SPACE)
		in = Not in
	EndIf
	
	colorCycle()
	If KeyDown(KEY_OPENBRACKET)
		'scale:/60
		scale:+.00005
	Else If KeyDown(KEY_CLOSEBRACKET)
		'scale:/60
		scale:-.00005
	EndIf
			
	If KeyDown(KEY_RIGHT)
		CX:+.005
	Else If KeyDown(KEY_LEFT)
		CX:-.005
	EndIf
	If KeyDown(KEY_DOWN)
		CY:+.005
	Else If KeyDown(KEY_UP)
		CY:-.005
	EndIf
	
	If Not in Then
		outMandelbrot(scale,CX,CY,iwidth,iheight,24,isize,-180,-120)
	Else
		inMandelbrot(scale,CX,CY,iwidth/2,iheight/2,24,isize+1)
	EndIf 
	
	
	SetColor(0,0,0)
	DrawText("CX="+CX+" CY="+CY+" Scale="+scale,12,12)
	DrawText("TAB - Toggle Color Cycle",12,27)
	DrawText("SPACE - Toggle IN/OUT Set",12,42)
	DrawText("1,2,3 - Select Color Set",12,57)
	DrawText("UP/DOWN - Change CY",12,72)
	DrawText("LEFT/RIGHT - Change CX",12,87)
	DrawText("[/] - Zoom",12,102)
	
	SetColor(255,255,255)
	DrawText("CX="+CX+" CY="+CY+" Scale="+scale,10,10)
	DrawText("TAB - Toggle Color Cycle",10,25)
	DrawText("SPACE - Toggle IN/OUT Set",10,40)
	DrawText("1,2,3 - Select Color Set",10,55)
	DrawText("UP/DOWN - Change CY",10,70)
	DrawText("LEFT/RIGHT - Change CX",10,85)
	DrawText("[/] - Zoom",10,100)
	
	Flip 
Wend
Function colorCycle()
	If CCycle=False Then Return
	Local cc:Int = colors.dimensions()[0]
	Local r:Int = colors[cc-1,0]
	Local g:Int = colors[cc-1,1]
	Local b:Int = colors[cc-1,2]
	For Local i:Int=cc-1 Until 0 Step -1
		colors[i,0]=colors[i-1,0]
		colors[i,1]=colors[i-1,1]
		colors[i,2]=colors[i-1,2]
	Next
	colors[0,0]=r
	colors[0,1]=g
	colors[0,2]=b
End Function
Function createColors(set:Byte)
	Select(set)
	Case 0
	'Rem grey shades
	'------------------------------------
	colors=New Int[256,3]
	For Local ci:Int = 0 Until 256
		colors[ci,0]=ci
		colors[ci,1]=ci
		colors[ci,2]=ci
	Next
	'EndRem
	Case 1
	'Rem darks to lights
	'------------------------------------
	colors=New Int[768,3]
	For Local ci:Int = 0 Until 256
		colors[ci,0]=ci
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=ci
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=ci
	Next
	'EndRem
	Case 2
	'Rem mid to light to mid
	'------------------------------------
	colors=New Int[768,3]
	For Local ci:Int = 0 Until 128
		colors[ci,0]=ci+128
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=ci+128
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=ci+128
	Next
	For Local ci:Int = 128 Until 256
		colors[ci,0]=256-ci+128
		colors[ci,1]=0
		colors[ci,2]=0
		colors[ci+256,0]=0
		colors[ci+256,1]=256-ci+128
		colors[ci+256,2]=0
		colors[ci+512,0]=0
		colors[ci+512,1]=0
		colors[ci+512,2]=256-ci+128
	Next
	'EndRem
	End Select
End Function
Function inMandelbrot(scale:Double,CX:Double,CY:Double,WIDTH:Int,HEIGHT:Int,Detail:Int,size:Int,xoff:Int=0,yoff:Int=0)
	SetOrigin(xoff,yoff)
	Local HALF_WIDTH:Double = WIDTH/2
	Local HALF_HEIGHT:Double = HEIGHT/2
	Local QUAR_WIDTH:Double = WIDTH/4
	Local QUAR_HEIGHT:Double = HEIGHT/4
	For Local PixelY:Int = -HALF_HEIGHT To HALF_HEIGHT
		For Local PixelX:Int = -HALF_WIDTH To HALF_WIDTH
	    	Local ZX:Double = CX+PixelX*scale
	    	Local ZY:Double = CY+PixelY*scale
			Local OldZX:Double = ZX
			Local OldZY:Double = ZY
	    	For Local i:Int = 0 To Detail
				Local NewZX:Double = (OldZX*OldZX)-(OldZY*OldZY)+ZX
				Local NewZY:Double = ((2*OldZX)*OldZY)+ZY
		      	OldZX = NewZX
		      	OldZY = NewZY
				Local DISTANCE:Double = (OldZX*OldZX) + (OldZY*OldZY)
		      	If DISTANCE > 4 Then 
					DISTANCE=4/DISTANCE * (colors.dimensions()[0]-1)
					SetColor(colors[DISTANCE,0],colors[DISTANCE,1],colors[DISTANCE,2])
					DrawRect((pixelx+HALF_WIDTH)*size,(pixely+HALF_HEIGHT)*size,size,size)
					Exit ' Go to nextpoint
				EndIf
    		Next
		Next 
	Next
	SetOrigin(0,0)
End Function
Function outMandelbrot(scale:Double,CX:Double,CY:Double,WIDTH:Int,HEIGHT:Int,Detail:Int,size:Int,xoff:Int=0,yoff:Int=0)
	SetOrigin(xoff,yoff)
	Local HALF_WIDTH:Double = WIDTH/2
	Local HALF_HEIGHT:Double = HEIGHT/2
	Local QUAR_WIDTH:Double = WIDTH/4
	Local QUAR_HEIGHT:Double = HEIGHT/4
	For Local PixelY:Int = -HALF_HEIGHT To HALF_HEIGHT
		For Local PixelX:Int = -HALF_WIDTH To HALF_WIDTH
	    	Local ZX:Double = CX+PixelX*scale
	    	Local ZY:Double = CY+PixelY*scale
			Local OldZX:Double = ZX
			Local OldZY:Double = ZY
			Local DISTANCE:Double = 0 
	    	For Local i:Int = 0 To Detail
				Local NewZX:Double = (OldZX*OldZX)-(OldZY*OldZY)+ZX
				Local NewZY:Double = ((2*OldZX)*OldZY)+ZY
		      	OldZX = NewZX
		      	OldZY = NewZY
				DISTANCE = (OldZX*OldZX) + (OldZY*OldZY)
		      	If DISTANCE > 4 Then Exit
			Next
	      	If DISTANCE < 4 Then 
				If DISTANCE>1 Then DISTANCE=1
				DISTANCE=DISTANCE * (colors.dimensions()[0]-1)
				SetColor(colors[DISTANCE,0],colors[DISTANCE,1],colors[DISTANCE,2])
				DrawRect((pixelx+HALF_WIDTH)*size,(pixely+HALF_HEIGHT)*size,size,size)
			EndIf
		Next 
	Next
	SetOrigin(0,0)
End Function
 
 |