Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # program r3_02.py
- # Pełny wykres
- import matplotlib.pyplot as plt
- import numpy as np
- # Definiujemy funkcję wczytującą dane
- def read_datas():
- def float_input(user_info, user_prompt, min_value):
- print("---[ wczytujemy dane]------------")
- print(user_info)
- user_input = input(user_prompt)
- if user_input.count(".") > 1:
- return None
- if not user_input.replace(".", "").isdecimal():
- return None
- user_value = float(user_input)
- if user_value < min_value:
- print(f"Wartość {user_value} jest mniejsza niż oczekiwana {min_value}.")
- return None
- return user_value
- h_start = None
- v_start = None
- while h_start is None:
- h_start = float_input(
- "Brak poprawnej wartości dla h_start. Typ float (np: 3.14)",
- "Teraz podaj wysokość początkową (w m, min. 10): ",
- 10,
- )
- while v_start is None:
- v_start = float_input(
- "Brak poprawnej wartości dla v_start. Typ float (np: 3.14)",
- "Teraz podaj prędność początkową (w m/s, min. 2) :",
- 2,
- )
- return (h_start, v_start)
- initial_values = None
- while initial_values is None:
- print("Proszę, podaj dane niezbędne do wygenerowania wykresu.")
- initial_values = read_datas()
- print("OK, dane początkowe wczytane - działamy dalej.")
- # Rozpakowywanie tupli
- H_START, V_START = initial_values
- # 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)
- # dodajemy wykres i umieszczamy punkt startu i spadku
- title = f"""Wykres rzutu poziomego z 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement