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