parabeltest mit korrekten parabeln & parametern
This commit is contained in:
parent
a55eabb46d
commit
d4eb22f246
1 changed files with 63 additions and 20 deletions
|
@ -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.")
|
||||
|
|
Loading…
Reference in a new issue