es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer una escala para C# en un panel?

Hola, soy nuevo en c# y estoy tratando de aprender cómo hacer una escala en un panel. He creado un Mandelbrot, pero ahora tengo que hacer zoom en -2 a 2 en ambos ejes.

Mi pregunta es, ¿cómo puedo hacer una escala (por ejemplo, x,y 0.01) para este panel en el que pueda elegir el centro del panel yo mismo? Quiero que mi gráfico vaya de -2 a 2 en ambos ejes. Sé que debería usar Graphics.ScaleTransform para hacer la escala y e.Graphics.TranslateTransform para centrarlo, pero simplemente no puedo entender cómo.

Este es mi método del panel:

public void panel1_Paint(object sender, PaintEventArgs e)
            {
        for (double p = 0; p < 400; p++)
            {
                for (double j = 0; j < 400; j++)
// Aquí lo amplié manualmente, pero solo para asegurarme de que el Mandelbrot funcionara
                    { 
                        int mandel = mandelgetalberekening((p - 200)*0.01, (j-200)*0.01);
                        if (mandel % 2 == 0)
                    {
                        e.Graphics.FillRectangle(Brushes.Purple, (float)p, (float)j, 1, 1);
                    }

                    else
                    {
                        e.Graphics.FillRectangle(Brushes.White, (float)p, (float)j, 1, 1);
                    }
                }

            }

Si intento usar algo como esto, solo me muestra una ventana vacía:

public void panel1_Paint(object sender, PaintEventArgs e)
            {
            e.Graphics.ScaleTransform((float)0.01, (float)0.01);
        for (double p = 0; p < 400; p++)
            {
                for (double j = 0; j < 400; j++)
                {
                    int mandel = mandelgetalberekening((p - 200)*0.01, (j-200)*0.01);
                    if (mandel % 2 == 0)

                    {
                        e.Graphics.FillRectangle(Brushes.Purple, (float)p, (float)j, 1, 1);
                    }

                    else
                    {
                        e.Graphics.FillRectangle(Brushes.White, (float)p, (float)j, 1, 1);
                    }
                }

            }

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una escala dentro de un panel en C#, primero necesitas usar el método ScaleTransform para hacer zoom en la sección deseada. Puedes establecer el factor de escala proporcionando los valores X e Y requeridos. Para centrar el panel, utiliza el método TranslateTransform, que desplaza el origen del objeto de gráficos a las coordenadas específicas.

    Para establecer la escala en los ejes -2 a 2, debes calcular el factor de escala dividiendo el ancho/alto del panel por 4, y usar este resultado como los valores X e Y para el método ScaleTransform. Para centrar el panel en (0,0), puedes calcular las coordenadas iniciales con la mitad de las dimensiones del panel, y luego trasladar el origen a estos puntos.

    Aquí tienes un ejemplo de código que implementa la escala y el centrado dentro de un panel:

    public void panel1_Paint(object sender, PaintEventArgs e)
    {
        // Calcular el factor de escala y las coordenadas iniciales
        float escala = panel1.Width / 4;
        float xInicio = panel1.Width / 2;
        float yInicio = panel1.Height / 2;
    
        // Aplicar transformaciones de escala y centrado
        e.Graphics.TranslateTransform(xInicio, yInicio);
        e.Graphics.ScaleTransform(escala, escala);
    
        for (double p = -2; p < 2; p += 0.01)
        {
            for (double j = -2; j < 2; j += 0.01)
            { 
                int mandel = mandelgetalberekening(p, j);
                if (mandel % 2 == 0)
                {
                    e.Graphics.FillRectangle(Brushes.Purple, (float)p, (float)j, 0.01f, 0.01f);
                }
                else
                {
                    e.Graphics.FillRectangle(Brushes.White, (float)p, (float)j, 0.01f, 0.01f);
                }
            }
        }
    }
    

    En este ejemplo, el bucle comienza en -2 y llega hasta 2 con un paso de 0.01, que corresponde a la escala deseada. El método FillRectangle se llama con los valores en punto flotante de las variables del bucle y 0.01f como el ancho y alto del rectángulo, que tienen en cuenta el factor de escala.

Comments are closed.