Пример #1
0
        private async Task CalculateBitmapPart(Bitmap bitmap, int fromHeight, int toHeight, Additional.DrawMode drawMode)
        {
            int width = bitmap.Width;

            double xmin = -1.5;
            double ymin = -1.2;
            double xmax = 1.5;
            double ymax = 1.5;
            double p = 0.32, q = 0.04;

            int W = 600;
            int H = 600;

            double dx = (xmax - xmin) / (W - 1);
            double dy = (ymax - ymin) / (H - 1);

            double x, y, X, Y, Cx, Cy;

            for (int ax = fromHeight; ax < toHeight; ax++)
            {
                for (int bx = 0; bx < width; bx++)
                {
                    x = xmin + ax * dx;
                    y = ymin + bx * dy;

                    Cx = x;
                    Cy = y;
                    X  = x;
                    Y  = y;

                    double ix = 0, iy = 0, n = 0;
                    while ((ix * ix + iy * iy < 4) && (n < 64))
                    {
                        switch (drawMode)
                        {
                        case Additional.DrawMode.Standard:
                            ix = X * X - Y * Y + Cx;
                            iy = 2 * X * Y + Cy;
                            break;

                        case Additional.DrawMode.Custom:
                            ix = X * X - Y * Y - p * p * p + 3 * p * q;
                            iy = 2 * X * Y - 3 * q * p * p + p * p * p;
                            break;
                        }
                        n++;
                        X = ix;
                        Y = iy;
                    }

                    n = 255 - n;

                    Color color = Color.FromArgb((int)n, (int)n, (int)n);
                    bitmap.SetPixel(bx, ax, color);
                }
            }

            using (Bitmap cpy = (Bitmap)bitmap.Clone())
            {
                texture.Destroy(openGLControl.OpenGL);
                texture.Create(openGLControl.OpenGL, cpy);
            }
            await Task.Yield();
        }
Пример #2
0
 private void modeComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
 => drawMode = (Additional.DrawMode)modeComboBox.SelectedIndex;