Previously posted a question on a C#.Net Mandelbrot set a while back which was helpfully answered, however I have had to go back to this Mandelbrot set and implement a struct on it's double variables that define the (imaginary and real) coordinates.
As someone that is just new to structs and a little rusty with them, I would like a little advice on what I am doing wrong and how to improve the said code as just by looking at it, I'm sure it can be optimized slightly. Is this the correct way to utilize a struct? If not, what are the alternatives or best techniques? Thanks.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace wmcMandelbrot
{
struct doubleVar
{
public double realCoord, imagCoord;
public double realTemp, imagTemp, realTemp2, arg;
public double newIcoord, newIcoord1, newIcoord2;
public double rCoord, rCoord1, rCoord2;
}
class Program
{
static void Main(string[] args)
{
doubleVar doubleNum;
int iterations;
Console.WriteLine("Enter first imaginary coord: ");
doubleNum.newIcoord = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter second imaginary coord: ");
doubleNum.newIcoord1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter third imaginary coord: ");
doubleNum.newIcoord2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter first real coord: ");
doubleNum.rCoord = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter second real coord: ");
doubleNum.rCoord1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter third real coord: ");
doubleNum.rCoord2 = Convert.ToDouble(Console.ReadLine());
for (doubleNum.imagCoord = doubleNum.newIcoord; doubleNum.imagCoord >= -doubleNum.newIcoord1; doubleNum.imagCoord -= doubleNum.newIcoord2)
{
for (doubleNum.realCoord = -doubleNum.rCoord; doubleNum.realCoord <= doubleNum.rCoord1; doubleNum.realCoord += doubleNum.rCoord2)
{
iterations = 0;
doubleNum.realTemp = doubleNum.realCoord;
doubleNum.imagTemp = doubleNum.imagCoord;
doubleNum.arg = (doubleNum.realCoord * doubleNum.realCoord) + (doubleNum.imagCoord * doubleNum.imagCoord);
while ((doubleNum.arg < 4) && (iterations < 40))
{
doubleNum.realTemp2 = (doubleNum.realTemp * doubleNum.realTemp) - (doubleNum.imagTemp * doubleNum.imagTemp) - doubleNum.realCoord;
doubleNum.imagTemp = (2 * doubleNum.realTemp * doubleNum.imagTemp) - doubleNum.imagCoord;
doubleNum.realTemp = doubleNum.realTemp2;
doubleNum.arg = (doubleNum.realTemp * doubleNum.realTemp) + (doubleNum.imagTemp * doubleNum.imagTemp);
iterations += 1;
}
switch (iterations % 4)
{
case 0:
Console.Write(".");
break;
case 1:
Console.Write("o");
break;
case 2:
Console.Write("O");
break;
case 3:
Console.Write("@");
break;
}
}
Console.Write("\n");
}
Console.ReadKey();
}
}
}