• 作者: 秒速340 2012年11月28日星期三

    跟着《C#入门经典》第四版上的代码自己写的:

    static void Main(string[] args)
    {
    double realCoord, imagCoord;
    double realTemp, imagTemp, realTemp2, arg;
    int iterations;
    for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05)
    {
    for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
    {
    iterations = 0;
    realTemp = realCoord;
    imagTemp = imagCoord;
    arg =(realCoord * realCoord )+(imagCoord * imagCoord );
    while ((arg < 4) && (iterations < 40))
    {
    realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
    realTemp = realTemp2;
    arg = (realTemp * realTemp) + (imagTemp * imagTemp);
    iterations += 1;
    }
    switch (iterations % 4)
    {
    case 0:
    Console.WriteLine(".");
    break;
    case 1:
    Console.WriteLine("。");
    break;
    case 2:
    Console.WriteLine("0");
    break;
    case 3:
    Console.WriteLine("@");
    break;
    }
    }
    Console .Write ("n");
    }
    Console.ReadKey();
    }

    非常奇怪的是居然无法生成跟书本上一样的图形。不知道哪里出了问题。于是我就对照了几次,发现代码都一样啊!怎么回事?真见鬼了。于是不手写代码,直接复制粘贴然后运行,哎,可以啊,代码没错啊。真是见鬼了今天。

    然后我就一条一条代码复制覆盖过去测试,终于发现原来是switch语句中的Console.WriteLine()应为Console.Write(),还有:
    case 1:
    Console.Write("o");

    这句“o”是小写字母O,我写成句号“。”了……

    因为用VS2010习惯了程序自动填充,打了”console.w“之后敲了空格键,然后一没留意就成了WriteLine了。你妹的,对着都抄错,真活见鬼了。

    正确的应该为:
     static void Main(string[] args)
    {
    double realCoord,imagCoord;
    double realTemp,imagTemp,realTemp2,arg;
    int iterations;
    for(imagCoord=1.2;imagCoord>=-1.2;imagCoord-=0.05)
    {
    for(realCoord=-0.6;realCoord<=1.77;realCoord+=0.03)
    {
    iterations=0;
    realTemp=realCoord;
    imagTemp=imagCoord;
    arg=(realCoord*realCoord)+(imagCoord*imagCoord);
    while((arg<4)&&(iterations<40))
    {
    realTemp2=(realTemp*realTemp)-(imagTemp*imagTemp)-realCoord;
    imagTemp=(2*realTemp*imagTemp)-imagCoord;
    realTemp=realTemp2;
    arg=(realTemp*realTemp)+(imagTemp*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();
    }

    ====================

    顺便用了一下百度百科上的mandelbrot图像C#代码:
    static void Main(string[] args)
    {
    double realCoord, imagCoord;
    double realMax = 1.77;
    double realMin = -0.6;
    double imagMax = -1.2;
    double imagMin = 1.2;
    double realStep;
    double imagStep;
    double realTemp, imagTemp, realTemp2, arg;
    int iterations;
    while (true)
    {
    realStep = (realMax - realMin) / 79;
    imagStep = (imagMax - imagMin) / 48;
    for (imagCoord = imagMin; imagCoord >= imagMax;
    imagCoord += imagStep)
    {
    for (realCoord = realMin; realCoord <= realMax;
    realCoord += realStep)
    {
    iterations = 0;
    realTemp = realCoord;
    imagTemp = imagCoord;
    arg = (realCoord * realCoord) + (imagCoord *
    imagCoord);
    while ((arg < 4) && (iterations < 40))
    {
    realTemp2 = (realTemp * realTemp) - (imagTemp *
    imagTemp)
    - realCoord;
    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
    realTemp = realTemp2;
    arg = (realTemp * realTemp) + (imagTemp *
    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.WriteLine("Current limits:");
    Console.WriteLine("realCoord: from {0} to {1}", realMin,
    realMax);
    Console.WriteLine("imagCoord: from {0} to {1}", imagMin,
    imagMax);
    Console.WriteLine("Enter new limits:");
    Console.WriteLine("realCoord: from:");
    realMin = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("realCoord: to:");
    realMax = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("imagCoord: from:");
    imagMin = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("imagCoord: to:");
    imagMax = Convert.ToDouble(Console.ReadLine());
    }
    }

    用这个代码倒是能出现图形。

     

    0 评论

  • - 除非注明,本站采用创作共用版权协议:知识共享许可协议 - 但小说和诗词作品采用的是:知识共享许可协议 -
    - Power by Blogger - Template by Johanes Djogan - Modify by miaosu340