load (draw); start : [-3,-3]; v : [0.2,0.2]; r : 0.3; /* Unglückseligerweise ist der Ball kein Punkt. Der Ball wird an seinem Rand gespiegelt. pos ist nicht! der Mittelpunkt des Balles sondern ein Randpunkt. pos trifft die Wand. */ pos : start + [r,0]; /* Das ist die rechte Ecke der Kugel */ anzahlbilder : 30; for i : 0 while i < anzahlbilder do block ([], bild[i] : gr2d ( xrange = [-5,5], yrange = [-5,5], xaxis = false, yaxis = false, xtics = false, ytics = false, line_width = 6, line_type = solid, points_joined = true, points ([[0,-4.5], [0,4.5]]), color = black, line_width = 2, if (v[1] < 0) then ( transparent = true, line_type = dots, ellipse (-(pos[1]-r), pos[2], r, r, 0, 360) ) else line_type = solid , line_type = solid, transparent = false, fill_color = black, ellipse (pos[1]-r, pos[2], r, r, 0, 360), head_length = 0.3, /* 7 ist ein Skalierungsfaktor, damit das Bild schoen ist */ vector ([pos[1]-r, pos[2]],[7*v[1],0]), /* v in x Richtung */ vector ([pos[1]-r, pos[2] + r],[0,7*v[2]]) /* v in y Richtung */ ), pos : pos + v, if (pos[1] > 0) then ( pos[1] : -pos[1], v[1] : -v[1] ) )$ bilder : [bild[0]]$ for i : 1 while i < anzahlbilder do bilder : append (bilder, [bild[i]])$ draw ( bilder, delay = 50, file_name = "kugelabprall", terminal = animated_gif );