Files
2025_12_15_python/dzien_03/skrypt_04.py
2025-12-17 15:21:39 +01:00

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