Diskuze: Dlouhé vykreslování

C# .NET .NET (C# a Visual Basic) Dlouhé vykreslování American English version English version

Avatar
n5ver
Člen
Avatar
n5ver:

Ahoj, porč ser mi Mandelbrotova množina vykresluje tak dlouho?

public Form1()
        {
            InitializeComponent();

            pictureBox1.Image = MandelbrotSet(pictureBox1.Width, pictureBox1.Height, 2.0, -2.0, 2.0, -2.0);
        }

        public Bitmap MandelbrotSet(int width, int height, double rMax, double rMin, double iMax, double iMin)
        {
            double rScale = (Math.Abs(rMin) + Math.Abs(rMax))/width;
            double iScale = (Math.Abs(iMin) + Math.Abs(iMax))/height;
            Bitmap img = new Bitmap(width, height);

            for (int x = 0; x < img.Width; x++)
            {
                double tempx = (x*rScale + rMin);
                for (int y = 0; y < img.Height; y++)
                {
                    Complex c = new Complex(tempx, (y * iScale + iMin));
                    Complex z = c;
                    int iteration = 0;

                    while (z.Magnitude <= 2 && iteration < 500)
                    {
                        iteration++;
                        z = c + Complex.Pow(z, 2);
                    }

                    if(iteration != 500)
                        img.SetPixel(x, y, Color.FromArgb(iteration % 128 * 2, iteration % 32 * 7, iteration % 16 * 14));
                    else
                        img.SetPixel(x, y, Color.Black);
                }
            }

            return img;
        }
 
Odpovědět 10.9.2015 13:43
Avatar
Odpovídá na n5ver
sadlomaslox25:

img.SetPixel je strasne pomale. lepsi je si to vykreslit do pole a to protocit na bitmapu nebo pres unsafe a zapisovat ty pixely pres pointery.

 
Nahoru Odpovědět 10.9.2015 21:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.