From d4eb22f2461fd0b61c6e137de76ca9fd0b8c88d5 Mon Sep 17 00:00:00 2001 From: Wolfgang Nowak Date: Mon, 13 Nov 2023 19:11:51 +0100 Subject: [PATCH] parabeltest mit korrekten parabeln & parametern --- parabeltest.py | 83 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 20 deletions(-) diff --git a/parabeltest.py b/parabeltest.py index 1b3de89..6d5040a 100755 --- a/parabeltest.py +++ b/parabeltest.py @@ -3,60 +3,103 @@ import os, sys, termios, tty, time, random -from math import sin, cos, sqrt +from math import sin, cos, tan, sqrt from time import sleep # Randomly choose a cow cows = "πŸ΅πŸ’πŸ¦πŸ¦§πŸ•πŸ―πŸ¦πŸ©πŸ…πŸ΄πŸŽπŸ¦„πŸ¦ŒπŸ—πŸ‚πŸƒπŸ„πŸͺπŸ«πŸ¦™πŸ¦’πŸΉπŸ¦˜πŸ¦‘πŸ§πŸ•ŠοΈπŸ¦…πŸ¦†πŸ¦‰πŸπŸ¦ŽπŸŠπŸ¦œπŸ¦šπŸ¦©πŸ²πŸ‰πŸ¦•" cowlistlength = len(cows) cow = cows[random.randint(0, cowlistlength - 1)] -# cow = "πŸ„" -# cow = "*" -cowlength=len(cow) +cowlength = len(cow) # Needed: find our screensize termsize_xy = os.get_terminal_size() xmax = termsize_xy[0] - 1 -xmitte = xmax / 2 ymax = termsize_xy[1] - -# CTRL and ESC-codes for the used outputdevice. Probably a terminal. -clear, home, curoff, curon = "'\x1b[2J\x1b[H", "\x1b[H", "\x1b[?25l", "\x1b[?25h" - +ymin = 0 +xmin = 0 # pi is not defined by default pi = 3.1416 deg2rad = pi / 180 + # position cursor at x,y - where x=0 y=0 is the left lower corner like in mathematical diagrams def curpos(x, y): print("\033[%d;%dH" % (ymax - y, x), end="", flush=True) +# CTRL and ESC-codes for the used outputdevice. Probably a terminal. +clear, home, curoff, curon = "'\x1b[2J\x1b[H", "\x1b[H", "\x1b[?25l", "\x1b[?25h" + + # some scales, we need # not everything has to be recomputed in loops. -angle = 80 * deg2rad -sinangle = sin(angle) -cosangle = cos(angle) -power = sin(50 * deg2rad) xsteps = xmax -gravitation = 10 x = 0 y = x**2 +starthoehe = 0 +startwinkel = 45 +startgeschwindigkeit = 23 +erde = 9.81 +mond = 1.6 +jupiter = 24 +gravitation = erde + + +######################### +starthoehe = float(input("StarthΓΆhe: ")) +startwinkel = float(input("Startwinkel: ")) * deg2rad +startgeschwindigkeit = float(input("Startgeschwindigkeit: ")) + + +# Calculate time of flight +flugdauer = startgeschwindigkeit * sin(startwinkel) / gravitation + +# Calculate maximum height +hoehe = 0.5 * gravitation * flugdauer**2 + starthoehe + +# calculate length of flight +wurfweite = ( + startgeschwindigkeit + * cos(startwinkel) + * (startgeschwindigkeit * sin(startwinkel) + sqrt(startgeschwindigkeit**2 * sin(startwinkel) ** 2 + 2 * gravitation * starthoehe)) +) / gravitation + # init screen and wait for userinput + print(clear, curoff) -print(xsteps) +print( + "xteps: ", + xsteps, + "\nwurfweite: ", + wurfweite, + "\nstartwinkel: ", + startwinkel, + "\nstartgeschwindigkeit: ", + startgeschwindigkeit, + "\nstarthroehe: ", + starthoehe, + "hoehe: ", + hoehe, +) + a = input("CR please:") +# position cursor down left corner curpos(1, ymax) + +# cowlenght ist 2, is cow is an UTF8-Icon, otherwise 1 for x in range(1, xsteps, cowlength): - # parameters to fit the screen - y = (x - xmitte) ** 2 /xmitte - if y < ymax: - curpos(x, ymax- y) + # the formula, which genereates the y position for the corresponding x + y = (-(gravitation / (2 * startgeschwindigkeit**2 * cos(startwinkel) ** 2)) * x**2) + (tan(startwinkel) * x + starthoehe) + + # Ensure, that nothing has to be drawn outside the viewport + if y < ymax and y > ymin: + curpos(x, y) print(cow, end="") time.sleep(0.01) curpos(1, 1) -sys.exit(curon + "Schulz nun.") +sys.exit(curon + "Moooooooooooo.")