71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
def czytaj_dana_float(tekst: str, minimum: float = 1.0, maximum: float = 20.0 )-> float:
|
|
"""
|
|
Docstring for czytaj_dana_float - czyli krótka dokumentacja funkcji
|
|
|
|
:param tekst: Description - tu ma być tekst dla usera
|
|
:type tekst: str
|
|
:param minimum: Description - minimalna wartość
|
|
:type minimum: float
|
|
:param maximum: Description
|
|
:type maximum: float
|
|
:return: wczytana z klaimport matplotlib.pyplot as plt
|
|
import numpy as npwiatyru wartość typu float
|
|
:rtype: float
|
|
"""
|
|
tmp_value = None
|
|
ret_value = None
|
|
value_ok = False
|
|
print(f"{minimum=}")
|
|
while not value_ok:
|
|
tmp_value = input(f"{tekst} - pamiętaj o {minimum=} i {maximum=}: ")
|
|
try:
|
|
ret_value = float(tmp_value)
|
|
value_ok = True
|
|
print("Super!")
|
|
if ret_value < minimum:
|
|
ret_value = minimum
|
|
if ret_value > maximum:
|
|
ret_value = maximum
|
|
except:
|
|
print(f"Wrowadziłeś błędnie: {tmp_value} - spróbuj ponownie...")
|
|
|
|
return ret_value
|
|
|
|
|
|
|
|
H_START = czytaj_dana_float("Podaj wysokość startową",3.0)
|
|
V_START = czytaj_dana_float("Podaj prędkość startową")
|
|
|
|
# Obliczamy najważniejsze wartości
|
|
|
|
g = 9.81 # m/s^2
|
|
total_time = ((2 * H_START) / g) ** (1 / 2)
|
|
max_range = V_START * total_time
|
|
|
|
|
|
# Obliczamy kolejne wartości Y dla X co 1/100 ogólnego zasięgu
|
|
x_points = np.arange(0, max_range, max_range / 100)
|
|
y_points = H_START - ((g / 2) * (x_points / V_START) ** 2)
|
|
|
|
print(x_points)
|
|
print(y_points)
|
|
|
|
title = f"""Wykres rzutu poziomego z
|
|
H_START = {H_START} V_START = {V_START} m/s (g = {g} m/s^2)
|
|
Czas lotu = {round(total_time,4)} s."""
|
|
|
|
|
|
|
|
plt.scatter(0, H_START, label=f"H_START={H_START} m")
|
|
plt.scatter(max_range, 0, label=f"max_range={round(max_range,3)} m")
|
|
plt.plot(x_points, y_points, marker="+", color="red", label="Kolejne punkty rzutu.")
|
|
plt.grid()
|
|
plt.title(title)
|
|
plt.xlabel("Odległość w metrach")
|
|
plt.ylabel("Wysokość w metrach")
|
|
plt.legend()
|
|
plt.show()
|