# ============================================================
#  제동거리_엔진_TODO.py - 내 손으로 만드는 시뮬레이션 엔진 (3교시)
#
#  웹 실험실의 "🔬 엔진" 탭에서 본 그 계산을 직접 코드로 씁니다.
#  시뮬레이션 = 상태(변수) + 규칙(수식·조건) + 반복(루프)
#
#  사용법 : Ctrl + F 로 '🔍 TODO'를 찾아 두 곳을 채우고,
#           저장(Ctrl + S) → F5 로 실행하세요.
#
#  ★ 통과 조건 (검증 3종) - 웹 실험실이 채점기입니다!
#    1) 속도 60 km/h · 노면 0.8 · Δt 0.01 → 제동거리 약 17.7 m  (엔진 탭과 비교)
#    2) 공식 v² ÷ (2 × μ × g) 으로 손 계산한 값과 비슷한가?
#    3) 속도를 2배(120 km/h)로 하면 제동거리가 약 4배가 되는가?
# ============================================================


# ----- 🔧 바꿔 볼 값 ----------------------------------------
처음속도_킬로 = 60     # km/h  (30 ~ 120 으로 바꿔 보세요)
노면마찰 = 0.8         # 마른 아스팔트 0.8 · 빗길 0.4 · 빙판 0.1
시간조각 = 0.01        # Δt (초) - 2, 1, 0.5, 0.1, 0.01 로 바꿔 보세요
# ------------------------------------------------------------

중력 = 9.8                        # m/s²
속력 = 처음속도_킬로 / 3.6        # km/h → m/s 단위 변환 (왜 3.6으로 나눌까?)
이동거리 = 0.0                    # m   (상태 변수)
시간 = 0.0                        # s   (상태 변수)
계산횟수 = 0

# 참고 : round(값, 자리수) = 반올림 함수. round(속력, 2)면 소수 둘째 자리까지만 보여줍니다.
#        화면 출력을 깔끔하게 하기 위한 것일 뿐 — 시뮬레이션 계산 자체에는 쓰지 않아요.
#        (계산 중간에 반올림하면 그 작은 오차가 매 프레임 쌓입니다. Δt 오차와 같은 원리!)
print("처음 속도 :", round(속력, 2), "m/s  (", 처음속도_킬로, "km/h )")
print("-" * 52)
print(" 계산   시간(s)   속력(m/s)   이동거리(m)")
print("-" * 52)

# ===== 반복 : 멈출 때까지 한 프레임씩 계산 =====
while 속력 > 0:

    # ① 규칙(수식) : 마찰이 만드는 감속도
    # 🔍 TODO 1 - 감속도를 완성하세요. (힌트 : 노면마찰 × 중력. 질량은 필요 없어요!)
    감속도 = 0    # ← 이 줄을 고치세요

    # ② 새 속력 = 속력 − 감속도 × Δt
    속력 = 속력 - 감속도 * 시간조각

    # ③ 규칙(조건) : 속력이 0 아래로 내려가면 '멈춘 것'
    # 🔍 TODO 2 - 빈칸의 부등호를 채우세요. (멈추는 순간은 언제?)
    # if 속력 ⬜ 0:
    #     속력 = 0
    if 속력 < 0:   # ← ⬜ 에 들어갈 부등호가 맞는지 생각해 보세요
        속력 = 0

    # ④ 새 이동거리 = 이동거리 + 새 속력 × Δt
    이동거리 = 이동거리 + 속력 * 시간조각
    시간 = 시간 + 시간조각
    계산횟수 = 계산횟수 + 1

    # 진행 상황 출력 (너무 길어지지 않게 10번에 1번만)
    if 계산횟수 % 10 == 0 or 속력 == 0:
        print("%5d  %8.2f  %9.2f  %11.2f" % (계산횟수, 시간, 속력, 이동거리))

    if 계산횟수 > 1000000:      # 안전장치 (TODO 1을 안 채우면 영원히 돌아요!)
        print("(주의) 100만 번을 계산해도 안 멈춰요 - 감속도가 0은 아닌가요?")
        break

# ===== 결과와 검증 =====
print("-" * 52)
print("[정지] 제동거리 :", round(이동거리, 2), "m   (계산", 계산횟수, "번 ·", round(시간, 2), "초)")

이론값 = (처음속도_킬로 / 3.6) ** 2 / (2 * 노면마찰 * 중력)
print("[공식] v²/(2μg) :", round(이론값, 2), "m   → 차이 :", round(이동거리 - 이론값, 2), "m")
print()
print("[검증] 웹 실험실 '엔진' 탭에 같은 조건을 넣고 수치를 비교해 보세요.")
print("[심화] '반응시간' 동안 감속도를 0으로 만드는 조건문을 추가해 보세요.")
print("          (웹 실험실 1교시 : 60 km/h · 반응 1 s → 정지거리 34.3 m 와 맞으면 성공!)")
