Home > Back-end >  I can't draw all functions with my script
I can't draw all functions with my script

Time:11-27

I made a script, which should take the user input of a mathematical function (f(x)=...) and draw it. I used pygame for that because I want to use that mechanic for a game.

I have to run the code of a function once without any output once, but after that, it flawlessly works heres the code:

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

CodePudding user response:

Create a list of points from the function:

f = replace_x(function_input)
pt_list = []
for x in range(-20, 20):
    pt_list.append((x, f(x)))

Either print the list of points:

print(pt_list)

or print the list in a loop:

for pt in pt_list:
    print(pt)

Create a list of screen coordinates from the list of point:

coord_list = []
for pt in pt_list:
    x = round(convert_x(pt[0] * 20))
    y = round(convert_y(pt[1]))
    coord_list.append((x, y))

Draw the curve in the application loop with

  • Related