Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
08b117baf9
2 changed files with 79 additions and 20 deletions
20
README.md
20
README.md
|
@ -26,4 +26,24 @@ and returns a list of x and y coordinates: [x1,y1,x2,y2....] like the following
|
||||||
|
|
||||||
The parameter cow is not useless, it can be set to any singlebyte ASCII string like "*" or some doublespaced UTF8 char like "🐄". If it is a singlechar in ASCII, which is the default, the curve will be calculated with singlesteps, if ist is a UTF8-String, each step will be 2 points, because we now know, we have a textmode display and doublewidth chars.
|
The parameter cow is not useless, it can be set to any singlebyte ASCII string like "*" or some doublespaced UTF8 char like "🐄". If it is a singlechar in ASCII, which is the default, the curve will be calculated with singlesteps, if ist is a UTF8-String, each step will be 2 points, because we now know, we have a textmode display and doublewidth chars.
|
||||||
|
|
||||||
|
```
|
||||||
|
# X-Resolution of the display
|
||||||
|
|
||||||
|
cow="🐫"
|
||||||
|
xmax = 100
|
||||||
|
ymax = 40
|
||||||
|
ymin = 0
|
||||||
|
xmin = 0
|
||||||
|
startwinkel = 34
|
||||||
|
startgeschwindigkeit = 31
|
||||||
|
starthoehe = 0
|
||||||
|
|
||||||
|
ergebnis = berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe)
|
||||||
|
|
||||||
|
for count in range(xmin, len(ergebnis), 2):
|
||||||
|
x, y = ergebnis[count], ergebnis[count + 1]
|
||||||
|
curpos(x, y)
|
||||||
|
print(cow, end="")
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import os, sys, termios, tty, time, random
|
||||||
from math import sin, cos, tan, sqrt
|
from math import sin, cos, tan, sqrt
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
|
########################################################################################
|
||||||
def berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe):
|
def berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe):
|
||||||
x = 0
|
x = 0
|
||||||
y = x**2
|
y = x**2
|
||||||
|
@ -17,14 +17,17 @@ def berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigk
|
||||||
jupiter = 24
|
jupiter = 24
|
||||||
gravitation = erde
|
gravitation = erde
|
||||||
startwinkel = startwinkel * deg2rad
|
startwinkel = startwinkel * deg2rad
|
||||||
|
if cow.isascii():
|
||||||
|
cowlength = 1
|
||||||
|
else:
|
||||||
|
cowlength = 1
|
||||||
|
|
||||||
# Calculate time of flight
|
# Calculate time of flight, actually not used
|
||||||
flugdauer = startgeschwindigkeit * sin(startwinkel) / gravitation
|
flugdauer = startgeschwindigkeit * sin(startwinkel) / gravitation
|
||||||
schlafdauer = flugdauer / xmax
|
|
||||||
# Calculate maximum height
|
# Calculate maximum height
|
||||||
hoehe = 0.5 * gravitation * flugdauer**2 + starthoehe
|
hoehe = 0.5 * gravitation * flugdauer**2 + starthoehe
|
||||||
|
|
||||||
# calculate length of flight
|
# calculate length of flight, actually not used
|
||||||
wurfweite = (
|
wurfweite = (
|
||||||
startgeschwindigkeit
|
startgeschwindigkeit
|
||||||
* cos(startwinkel)
|
* cos(startwinkel)
|
||||||
|
@ -34,37 +37,73 @@ def berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigk
|
||||||
# cowlength is 2, if cow is an UTF8-Icon, otherwise 1
|
# cowlength is 2, if cow is an UTF8-Icon, otherwise 1
|
||||||
for x in range(xmin, xsteps - 1, cowlength):
|
for x in range(xmin, xsteps - 1, cowlength):
|
||||||
# the formula, which generates the y position for the corresponding x, shamelessly ripped from some schoolbook and modified.
|
# the formula, which generates the y position for the corresponding x, shamelessly ripped from some schoolbook and modified.
|
||||||
yold = y
|
|
||||||
y = (-(gravitation / (2 * startgeschwindigkeit**2 * cos(startwinkel) ** 2)) * x**2) + (tan(startwinkel) * x + starthoehe)
|
y = (-(gravitation / (2 * startgeschwindigkeit**2 * cos(startwinkel) ** 2)) * x**2) + (tan(startwinkel) * x + starthoehe)
|
||||||
|
|
||||||
# Ensure, that nothing has to be drawn outside the viewport
|
# Ensure, that nothing has to be drawn outside the viewport
|
||||||
if y < ymax and y > ymin:
|
if y <= ymax and y >= ymin:
|
||||||
# Stash awa the coordinates into scala, which will be returned
|
# Stash away the coordinates into scala, which will be returned
|
||||||
scala += [x, int(y * 10 + 5) / 10]
|
scala += [x, int((y * 100 + 50) / 100)]
|
||||||
else:
|
else:
|
||||||
scala += [x, 0]
|
scala += [0, 0]
|
||||||
|
|
||||||
xold = x
|
xold = x
|
||||||
|
|
||||||
return scala
|
return scala
|
||||||
|
|
||||||
|
|
||||||
|
#############################################################################################
|
||||||
# berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe):
|
# berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe):
|
||||||
|
|
||||||
|
# some useful control
|
||||||
|
clear, home, curoff, curon = "'\x1b[2J\x1b[H", "\x1b[H", "\x1b[?25l", "\x1b[?25h"
|
||||||
|
# set position of cursor
|
||||||
|
def curpos(x, y):
|
||||||
|
print("\033[%d;%dH" % (ymax - y, x), end="", flush=True)
|
||||||
|
|
||||||
cow = "🦝"
|
|
||||||
cowlength = len(cow)
|
# Randomly choose a cow
|
||||||
xmax = 157
|
cows = "🐵🐒🦍🦧🐕🐯🦝🐩🐅🐴🐎🦄🦌🐗🐂🐃🐄🐪🐫🦙🦒🐹🦘🦡🐧🕊️ 🦅🦆🦉🐍🦎🐊🦜🦚🦩🐲🐉🦕"
|
||||||
ymax = 38
|
cowlistlength = len(cows)
|
||||||
ymin = 0
|
cow = cows[random.randint(0, cowlistlength - 1)]
|
||||||
xmin = 0
|
|
||||||
xold = xmin
|
|
||||||
# pi is not defined by default
|
# pi is not defined by default
|
||||||
pi = 3.1416
|
pi = 3.1416
|
||||||
deg2rad = pi / 180
|
deg2rad = pi / 180
|
||||||
|
|
||||||
|
# Needed: find our screensize. We are in textmode here
|
||||||
|
termsize_xy = os.get_terminal_size()
|
||||||
|
|
||||||
|
### I m p o r t a n t p a r a m e t e r s ###
|
||||||
|
|
||||||
|
# X-Resolution of the display
|
||||||
|
xmax = termsize_xy[0] - 1
|
||||||
xsteps = xmax
|
xsteps = xmax
|
||||||
wurfweite = 0
|
ymax = termsize_xy[1]
|
||||||
|
ymin = 0
|
||||||
|
xmin = 0
|
||||||
startwinkel = 34
|
startwinkel = 34
|
||||||
startgeschwindigkeit = 23
|
startgeschwindigkeit = 31
|
||||||
starthoehe = 0
|
starthoehe = 0
|
||||||
print(berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe))
|
schlafzeit = 0.05
|
||||||
|
###
|
||||||
|
|
||||||
|
# needed for erasing ol position
|
||||||
|
xold = xmin
|
||||||
|
yold = ymin
|
||||||
|
x = xmin
|
||||||
|
y = xmin
|
||||||
|
|
||||||
|
# Call the function, which calculates the coordinates)
|
||||||
|
ergebnis = berechneflugbahn(cow, xmin, xmax, ymin, ymax, startwinkel, startgeschwindigkeit, starthoehe)
|
||||||
|
print(curoff)
|
||||||
|
# here we draw the cow
|
||||||
|
for count in range(xmin, len(ergebnis), 2):
|
||||||
|
xold, yold = x, y
|
||||||
|
x, y = ergebnis[count], ergebnis[count + 1]
|
||||||
|
curpos(x, y)
|
||||||
|
print(cow, end="")
|
||||||
|
sleep(schlafzeit)
|
||||||
|
curpos(xold, yold)
|
||||||
|
print("☁️ ", end="")
|
||||||
|
|
||||||
|
|
||||||
|
sys.exit(home + cow + curon)
|
||||||
|
|
Loading…
Reference in a new issue