Schnellere Methode zum zeichnen in C#

Ich versuche zum zeichnen der Mandelbrot-fraktal, verwenden Sie die folgende Methode, die ich geschrieben habe:

public void Mendelbrot(int MAX_Iterations)
{
    int iterations = 0;

    for (float x = -2; x <= 2; x += 0.001f)
    {
        for (float y = -2; y <= 2; y += 0.001f)
        {
            Graphics gpr = panel.CreateGraphics();

            //System.Numerics
            Complex C = new Complex(x, y);
            Complex Z = new Complex(0, 0);

            for (iterations = 0; iterations < MAX_Iterations && Complex.Abs(Z) < 2; Iterations++)
                Z = Complex.Pow(Z, 2) + C;

            //ARGB color based on Iterations
            int r = (iterations % 32) * 7;
            int g = (iterations % 16) * 14;
            int b = (iterations % 128) * 2;
            int a = 255;

            Color c = Color.FromArgb(a,r,g,b);
            Pen p = new Pen(c);

            //Tranform the coordinates x(real number) and y(immaginary number) 
            //of the Gauss graph in x and y of the Cartesian graph
            float X = (panel.Width * (x + 2)) / 4;
            float Y = (panel.Height * (y + 2)) / 4;

            //Draw a single pixel using a Rectangle
            gpr.DrawRectangle(p, X, Y, 1, 1);
        }
    }
}

Es funktioniert, aber es ist langsam, weil ich muss hinzufügen der Möglichkeit zum Zoomen. Mit dieser Methode der Zeichnung, es ist nicht möglich, also muss ich schnell etwas. Ich habe versucht, eine FastBitmap, aber es ist nicht genug, die SetPixel des FastBitmap nicht erhöhen Sie die Geschwindigkeit der Zeichnung. Also ich bin auf der Suche nach etwas sehr schnell, ich weiß, dass C# nicht wie C und ASM, aber es wäre interessant, dies in C# und Winforms.

Vorschläge sind willkommen.

EDIT: Mendelbrot Set Zoom Animation

  • Das erste, was ich tun würde, ist erstellen Sie Ihre Grafik-Objekt außerhalb der Schleife.
  • Die nächste Sache, wenn man es ist, etwas zu verwenden, wie XNA zu tun, die Berechnungen auf der GPU. Sechzig Fractals Pro Sekunde
  • Mag die Idee. Also glaubst du kann ich die XNA Bibliotheken und dies in WinForms?
  • C# ist wie C oder ASM wenn Sie das unsafe-Schlüsselwort. Google "bitmap".lockbits-Zeiger".
  • Sie können die XNA-Bibliotheken, um eine WinForms-Projekt: AppHub - WinForms. In Ihrem Fall würden Sie zeichne 2 Dreiecke (um eine full-screen-quad) mit einem shader, die Sie schrieb, ähnlich wie der verlinkte in meinem vorherigen Kommentar
  • Duckett Ok. Ich danke Ihnen sehr für die Anregungen!
  • Nun, in diesem Fall Ihre Annahmen sind Ihr problem wahrscheinlich. Einen profiler verwenden. Schwer zu sehen, wie es geht, zu sagen, nichts anderes, aber Komplex.Pow() als Ihr echtes Nadelöhr. Es sollte zu brennen 99% der gesamten CPU-Zeit.

InformationsquelleAutor Omar | 2012-01-15
Schreibe einen Kommentar