Merge remote-tracking branch 'origin/main'

This commit is contained in:
The Wobbler 2023-12-04 17:28:52 +01:00
commit 08b117baf9
2 changed files with 79 additions and 20 deletions

View file

@ -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="")
```

View file

@ -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)