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.

No puedo dibujar todas las funciones con mi script.

Hice un script que debería tomar la entrada del usuario de una función matemática (f(x)=…) y dibujarla. Usé pygame para eso porque quiero usar esa mecánica para un juego.

Tengo que ejecutar el código de una función una vez sin ninguna salida, pero después de eso, funciona sin problemas. Aquí está el código:

import pygame

def replace_x(function):
    f = lambda x: eval(function)
    return f

def convert_y(y_coords):
    y_coords = 540 - y_coords
    return y_coords

def convert_x(x_coord):
    x_coord = x_coord + 960
    return x_coord

variables:

background_colour = (255, 255, 255)
screen = pygame.display.set_mode((1920, 1080))
running = True
current_y = 0
previous_y = 0

pygame.init()
pygame.display.set_caption('Mathe Kreativarbeit')

screen.fill(background_colour)

pygame.display.flip()
function_input = input("Funktion: ")
function_input = function_input.replace("^", "**")
pygame.display.flip()

for x_coords in range(-15, 17):
    f = replace_x(function_input)
    current_y = convert_y(f(x_coords))
    previous_y = convert_y(f(x_coords - 1))
    start_pos = (convert_x((x_coords - 1) * 60), previous_y)
    end_pos = (convert_x(x_coords * 60), current_y)
    print(start_pos)
    print(end_pos)
    pygame.draw.aaline(screen, (0, 0, 0), start_pos, end_pos)

pygame.display.flip()

while running:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            running = False
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Explicación del código

    El código anterior está escrito en Python utilizando la biblioteca Pygame para dibujar funciones matemáticas de manera gráfica. Se espera que el usuario introduzca una función matemática en forma de f(x) = … y el programa dibujará el gráfico de esa función en la pantalla.

    El código primero define una función llamada “replace_x” que toma una función matemática como entrada y devuelve una función lambda que toma un solo argumento x, que se reemplaza en la cadena de la función original y luego se evalúa. Esta función lambda convertida se llama más tarde al calcular las coordenadas y de la función.

    La función “convert_y” toma la coordenada y de un punto en la pantalla y la convierte para que sea compatible con el eje y de Pygame, que comienza desde la parte superior de la pantalla en lugar de la parte inferior.

    La función “convert_x” toma la coordenada x de un punto en la pantalla y la mueve a la derecha 960 píxeles para mantenerla dentro del área visible de la pantalla.

    El programa luego inicializa Pygame con un título para la ventana y establece el color de fondo en blanco. Se le pide al usuario que introduzca una función matemática, que se convierte en una cadena y luego se ajusta para reemplazar el operador de exponente (^) con el operador de potencia (**).

    Luego se ejecuta un bucle desde -15 hasta 16, y para cada coordenada x dentro de este rango, se calcula la coordenada y llamando a la función lambda creada anteriormente con la coordenada x como entrada. Las coordenadas y de los puntos anteriores y actuales se convierten utilizando la función convert_y para que sean compatibles con el eje y de Pygame.

    Se crean dos puntos, uno en la coordenada x anterior y su coordenada y correspondiente, y otro en la coordenada x actual y su coordenada y correspondiente. Estos dos puntos se utilizan para crear una línea dibujada utilizando la función “pygame.draw.aaline” en la pantalla.

    Finalmente, se inicia un bucle principal while con un bucle de eventos que espera a que el usuario salga del programa o cierre la ventana haciendo clic en el botón “x” en la esquina superior.

    El problema mencionado en la pregunta parece ocurrir durante el bucle for que se ejecuta de -15 a 16, donde la primera iteración se ejecuta sin ningún resultado. Esto podría deberse al hecho de que la ventana de Pygame aún no está abierta cuando se ejecuta la primera iteración. Sin embargo, después de eso, el programa se ejecuta sin problemas y sin problemas.

Comments are closed.