import pygame from math import sin, cos minx = -3 maxx = 6 miny = -2 maxy = 5 pixel_pro_einheit = 50 schrittweite = 0.01 # Funktionen, deren Graph zu zeichnen ist def f(x): return x**2 def g(x): return -1/3*x+1 def h(x): return sin(x) schwarz = (0, 0, 0) weiss = (255, 255, 255) grau = (63, 63, 63) rot = (255, 0, 0) gruen = (0, 255, 0) blau = (0, 0, 255) breite = (maxx - minx) * pixel_pro_einheit hoehe = (maxy - miny) * pixel_pro_einheit pygame.init() fenster = pygame.display.set_mode((breite+1, hoehe+1)) pygame.display.set_caption("Funktionsgraphen zeichnen") def bildschirmkoordinaten(x, y): # Umrechnung der Koordinaten aus dem gewünschten Koordinatensystem in Fenster-/Bildschirmkoordinaten. px = (x - minx) * pixel_pro_einheit py = hoehe - (y - miny) * pixel_pro_einheit return [px, py] def linie(x0, y0, x1, y1, farbe=weiss, breite=0.05): pygame.draw.line(fenster, farbe, bildschirmkoordinaten(x0, y0), bildschirmkoordinaten(x1, y1), width=round(breite * pixel_pro_einheit)) def punkt(x, y, farbe=weiss, radius=0.05): pygame.draw.circle(fenster, farbe, bildschirmkoordinaten(x, y), radius * pixel_pro_einheit) fenster.fill(schwarz) # Demonstrationen: linie(minx, miny, maxx, maxy) linie(0, 0, 3, 1, grau) linie(minx, maxy, maxx, miny, rot, 0.2) punkt(3, 0) punkt(4, 1, rot) punkt(5, 2, gruen, 0.5) punkt(0, 0, radius=0.3) # Todo: # x-Achse (mit Pfeilspitze) # y-Achse # Pfeilspitzen zeichnen. # Markierungen an Achsen einzeichnen (per for-Schleife). # Graphen der Funktionen f, g und h zeichnen (per while-Schleife, Laufvariable jeweils um Variable "schrittweite" erhöhen). # Horizontales und vertikales Raster in grau einzeichnen (per for-Schleife; wann sollte man dies tun?) pygame.display.update() pygame.image.save(fenster, "graph-2d.jpg") ende = False while not ende: pygame.display.update() for ereignis in pygame.event.get(): if ereignis.type == pygame.QUIT: ende = True pygame.quit()