Hello, I am facing a problem with drawing Newton's fractal for f(x) = x^3 - 1 using F#
The problem is that my program seems to draw only the down right 1/4 of the fractal and nothing else. Since the actual drawn area is correct, I take it as the problem might be with the bitmap representation on the Form
Here's a link to the image I get
Imgur: The magic of the Internet[
^]
What I have tried:
open System
open System.Drawing
open System.Windows.Forms
open System.Numerics
let pi = 3.14159265359
let MaxCount = 50
let multCol = 15
let Tol = 0.5
let r1 = Complex(1.0, 0.0)
let r2 = Complex(-0.5, sin(0.66*pi))
let r3 = Complex(-0.5, -sin(0.66 * pi))
let createImage () =
let image = new Bitmap (800, 800,System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
let graphics = Graphics.FromImage(image)
let mutable maxMod = 0.0
for x = 0 to image.Width - 1 do
for y = 0 to image.Height - 1 do
let mutable z = Complex(float x , float y)
let mutable count = 0
while (count < MaxCount && Complex.Abs(z - r1) >= Tol && Complex.Abs(z - r2) >= Tol && Complex.Abs(z - r3) >= Tol) do
if(Complex.Abs(z) > 0.0) then
z <- z - (z*z*z - Complex(1.0,0.0))/(Complex(3.0,0.0) * z * z)
if(Complex.Abs(z) > maxMod) then
maxMod <- Complex.Abs(z)
count <- count + 1
let temp1 = Complex.Abs(z - r1)
let temp2 = Complex.Abs(z - r2)
let temp3 = Complex.Abs(z - r3)
if(Complex.Abs(z - r1) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
if(Complex.Abs(z - r2) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
if(Complex.Abs(z - r3) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Green)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
image.Save("redacted.png")
createImage()