Ранее был опубликован вопрос о наборе Мандельброта C # .Net, на который был дан полезный ответ, однако мне пришлось вернуться к этому набору Мандельброта и реализовать структуру на его двойных переменных, которые определяют (мнимые и реальные) координаты.
Как человек, который плохо знаком со структурами и немного устарел с ними, я хотел бы получить небольшой совет о том, что я делаю неправильно и как улучшить указанный код, поскольку, просто взглянув на него, я уверен, что его можно немного оптимизировать. . Это правильный способ использования структуры? Если нет, то каковы альтернативы или лучшие методы? Спасибо.
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();
}
}
}