39 lines
No EOL
1.1 KiB
FSharp
39 lines
No EOL
1.1 KiB
FSharp
module Julia
|
|
|
|
open System
|
|
open System.Numerics
|
|
open System.Drawing
|
|
|
|
let colorMap i nMax =
|
|
let h =
|
|
if ((float (i % 256)) / 255.0) <= 1.0 then
|
|
((float (i % 256)) / 255.0) * 360.0
|
|
else 360.0
|
|
let s = 0.6
|
|
let v = if i < nMax then 1.0 else 0.0
|
|
|
|
MandelBrot.hsbToRgb h s v
|
|
|
|
let generatePixel x y height width zoom rMax maxIter =
|
|
let c = MandelBrot.getComplexValueForPixel (float x) (float y) (float height) (float width) zoom
|
|
let z = Complex(-0.8, 0.156)
|
|
|
|
let rec findI i c =
|
|
if i >= maxIter then i
|
|
else if Complex.Abs(c) >= (float rMax) then i
|
|
else
|
|
let newRe = c.Real*c.Real - c.Imaginary*c.Imaginary
|
|
let newIm = 2.0 * c.Real * c.Imaginary
|
|
findI (i+1) ((Complex(newRe, newIm))+z)
|
|
|
|
colorMap (findI 0 c) maxIter
|
|
|
|
let generate (width:int) height zoom rMax maxIter =
|
|
let result = new Bitmap(width, height)
|
|
|
|
for y in 0 .. height-1 do
|
|
for x in 0 .. width-1 do
|
|
generatePixel x y height width zoom rMax maxIter
|
|
|> (fun color -> result.SetPixel(x, y, color))
|
|
|
|
result |