ABIX_Edukacja

Python3-demo

Oct 21st, 2021
1,304
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # program r3_02.py
  2. # Pełny wykres
  3.  
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6.  
  7. # Definiujemy funkcję wczytującą dane
  8. def read_datas():
  9.     def float_input(user_info, user_prompt, min_value):
  10.         print("---[ wczytujemy dane]------------")
  11.         print(user_info)
  12.         user_input = input(user_prompt)
  13.         if user_input.count(".") > 1:
  14.             return None
  15.  
  16.         if not user_input.replace(".", "").isdecimal():
  17.             return None
  18.  
  19.         user_value = float(user_input)
  20.         if user_value < min_value:
  21.             print(f"Wartość {user_value} jest mniejsza niż oczekiwana {min_value}.")
  22.             return None
  23.         return user_value
  24.  
  25.     h_start = None
  26.     v_start = None
  27.  
  28.     while h_start is None:
  29.         h_start = float_input(
  30.             "Brak poprawnej wartości dla h_start. Typ float (np: 3.14)",
  31.             "Teraz podaj wysokość początkową (w m, min. 10): ",
  32.             10,
  33.         )
  34.  
  35.     while v_start is None:
  36.         v_start = float_input(
  37.             "Brak poprawnej wartości dla v_start. Typ float (np: 3.14)",
  38.             "Teraz podaj prędność początkową (w m/s, min. 2) :",
  39.             2,
  40.         )
  41.  
  42.     return (h_start, v_start)
  43.  
  44.  
  45. initial_values = None
  46. while initial_values is None:
  47.     print("Proszę, podaj dane niezbędne do wygenerowania wykresu.")
  48.     initial_values = read_datas()
  49.  
  50. print("OK, dane początkowe wczytane - działamy dalej.")
  51.  
  52. # Rozpakowywanie tupli
  53. H_START, V_START = initial_values
  54.  
  55. # Obliczamy najważniejsze wartości
  56.  
  57. g = 9.81  # m/s^2
  58. total_time = ((2 * H_START) / g) ** (1 / 2)
  59. max_range = V_START * total_time
  60.  
  61. # Obliczamy kolejne wartości Y dla X co 1/100 ogólnego zasięgu
  62. x_points = np.arange(0, max_range, max_range / 100)
  63. y_points = H_START - ((g / 2) * (x_points / V_START) ** 2)
  64.  
  65. # dodajemy wykres i umieszczamy punkt startu i spadku
  66. title = f"""Wykres rzutu poziomego z V_START = {V_START} m/s (g = {g} m/s^2)
  67.        Czas lotu = {round(total_time,4)} s."""
  68.  
  69. plt.scatter(0, H_START, label=f"H_START={H_START} m")
  70. plt.scatter(max_range, 0, label=f"max_range={round(max_range,3)} m")
  71. plt.plot(x_points, y_points, marker="+", color="red", label="Kolejne punkty rzutu.")
  72. plt.grid()
  73. plt.title(title)
  74. plt.xlabel("Odległość w metrach")
  75. plt.ylabel("Wysokość w metrach")
  76. plt.legend()
  77. plt.show()
  78.  
RAW Paste Data