以前、C#.Net Mandelbrot セットに関する質問を投稿しましたが、これは有益な回答でしたが、この Mandelbrot セットに戻って、(虚数と実数) 座標を定義する double 変数に構造体を実装する必要がありました。
構造体を初めて使用し、少し錆びている人として、私が間違っていることと、上記のコードを見るだけで改善する方法について少しアドバイスをお願いします。わずかに最適化できると確信しています。 . これは構造体を利用する正しい方法ですか? そうでない場合、代替手段または最良の手法は何ですか? ありがとう。
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();
}
}
}