🪐 케플러 법칙 × 코딩 탐구
이심률이 바뀌어도
장반경은 그대로라고?
Python으로 궤도를 그려 확인하기
장반경은 그대로라고?
Python으로 궤도를 그려 확인하기
"이심률이 변하면 원일점·근일점 거리도 변해야 하지 않나요?"
수능에서도 단골로 나오는 이 질문, 직접 코드로 증명합니다.
수능에서도 단골로 나오는 이 질문, 직접 코드로 증명합니다.
STORY
🪐 수업 시간에 터진 질문
지구과학 수업에서 케플러 법칙을 배우던 중이었습니다.
선생님이 "이심률이 달라도 장반경이 2AU로 고정되면 공전주기는 같다"고 설명하자,
한 학생이 손을 들었습니다.
"이심률이 변하면 궤도 모양이 바뀌잖아요.
그러면 가장 가까운 점(근일점)과 가장 먼 점(원일점)도 바뀔 텐데,
어떻게 장반경은 그대로인가요?
원일점 거리와 근일점 거리가 바뀌면 그 평균인 장반경도 바뀌어야 하지 않나요?"
정말 핵심을 찌르는 질문입니다. 이 질문은 단순히 암기로는 절대 나올 수 없는,
개념 간의 관계를 스스로 추론한 결과입니다.
실제로 선생님들 사이에서도 "수능에서 이심률이 달라도 장반경 2AU 고정으로 출제된다"는
내용 때문에 논쟁이 벌어지기도 했습니다.
핵심은 원일점과 근일점이 동시에, 반대 방향으로 변한다는 점입니다.
장반경 (a)
a = (r_max + r_min) / 2
타원의 긴 반지름
궤도 에너지 결정
공전주기 결정
궤도 에너지 결정
공전주기 결정
이심률 (e)
0 ≤ e < 1
궤도 찌그러짐 정도
e=0 → 원형
e→1 → 극단적 타원
e=0 → 원형
e→1 → 극단적 타원
각운동량 (L)
L = m·v·r·sinθ
궤도 찌그러짐 방향
에너지와 독립
이심률 결정
에너지와 독립
이심률 결정
🔑 핵심 관계식
r_max = a(1 + e) r_min = a(1 - e)
r_max + r_min = a(1+e) + a(1-e) = 2a
이심률 e가 변해도 r_max와 r_min이 정확히 반대 방향으로 같은 크기만큼 변하므로
두 값의 합 = 2a 는 항상 일정합니다.
두 값의 합 = 2a 는 항상 일정합니다.
💡 직관적 이해
이심률이 커지면 원일점은 더 멀어지고 근일점은 더 가까워집니다.
그런데 이 두 변화량이 정확히 같아서 평균(장반경)은 변하지 않습니다.
마치 양쪽 끝을 같은 크기로 늘이고 줄이면 중간값은 그대로인 것과 같습니다.
이것이 역학적 에너지가 장반경만으로 결정되는 이유입니다.
| 이심률 (e) | 근일점 r_min = a(1-e) | 원일점 r_max = a(1+e) | 장반경 a |
|---|---|---|---|
| e = 0.0 (원) | 2.0 AU | 2.0 AU | 2.0 AU ✅ |
| e = 0.3 | 1.4 AU | 2.6 AU | 2.0 AU ✅ |
| e = 0.6 | 0.8 AU | 3.2 AU | 2.0 AU ✅ |
| e = 0.9 | 0.2 AU | 3.8 AU | 2.0 AU ✅ |
VISUALIZATION
🎨 장반경이 같고 이심률이 다른 궤도들
장반경(a = 2AU)은 같지만 이심률이 다른 네 개의 궤도를 직접 그려보면
왜 장반경이 변하지 않는지 눈으로 확인할 수 있습니다.
네 궤도 모두 장반경(a)이 동일 → 공통 초점(태양) 기준으로 크기는 같고 모양만 다름
이심률이 커질수록 근일점은 오른쪽으로, 원일점은 왼쪽으로 같은 크기만큼 이동
이심률이 커질수록 근일점은 오른쪽으로, 원일점은 왼쪽으로 같은 크기만큼 이동
CODING LAB 01
🐍 이심률 변화 시 장반경 보존 검증
수식으로 이해한 내용을 Python 코드로 직접 검증합니다.
이심률을 0.0부터 0.95까지 변화시키면서
근일점, 원일점, 장반경을 계산하고
장반경이 항상 일정하게 유지되는지 확인합니다.
orbit_eccentricity.py
# 이심률 변화에 따른 궤도 파라미터 분석
import numpy as np
# 장반경 고정 (2AU)
a = 2.0 # AU (천문단위)
# 이심률 범위: 0.0 ~ 0.95
eccentricities = np.arange(0.0, 1.0, 0.1)
print(f"{'이심률(e)':^10} {'근일점(AU)':^12} {'원일점(AU)':^12} {'장반경(AU)':^12} {'검증'}")
print("-" * 58)
for e in eccentricities:
r_min = a * (1 - e) # 근일점 = a(1-e)
r_max = a * (1 + e) # 원일점 = a(1+e)
a_calc = (r_min + r_max) / 2 # 역산한 장반경
ok = "✅" if abs(a_calc - a) < 1e-10 else "❌"
print(f"{e:^10.1f} {r_min:^12.3f} {r_max:^12.3f} {a_calc:^12.3f} {ok}")
print()
print("핵심 확인:")
print(" r_max - r_min = 2ae (이심률에 비례해 벌어짐)")
print(" r_max + r_min = 2a (항상 일정!)")
# 케플러 제3법칙: 장반경만으로 공전주기 결정
print()
print("=== 케플러 제3법칙 검증 ===")
print(f"장반경 a = {a} AU → 공전주기 T = {a**1.5:.4f} 년")
print("이심률과 무관하게 공전주기는 동일합니다.")
# 실행 결과 (Output)
이심률(e) 근일점(AU) 원일점(AU) 장반경(AU) 검증----------------------------------------------------------
0.0 2.000 2.000 2.000 ✅
0.1 1.800 2.200 2.000 ✅
0.3 1.400 2.600 2.000 ✅
0.5 1.000 3.000 2.000 ✅
0.7 0.600 3.400 2.000 ✅
0.9 0.200 3.800 2.000 ✅
핵심 확인:
r_max - r_min = 2ae (이심률에 비례해 벌어짐)
r_max + r_min = 2a (항상 일정!)
=== 케플러 제3법칙 검증 ===
장반경 a = 2.0 AU → 공전주기 T = 2.8284 년
이심률과 무관하게 공전주기는 동일합니다.
이심률이 0.0에서 0.9까지 변해도 장반경은 항상 2.000 AU로 일정합니다.
근일점과 원일점이 정확히 반대 방향으로 같은 크기만큼 이동하기 때문입니다.
그리고 케플러 제3법칙에 따라 공전주기도 이심률과 무관하게 동일합니다.
CODING LAB 02
🌍 실제 태양계 행성 궤도 데이터 분석
이론을 확인했으니, 이번에는 실제 태양계 행성 데이터로 검증합니다.
각 행성의 장반경과 이심률로 근일점·원일점을 계산하고
케플러 제3법칙(T² ∝ a³)이 실제로 성립하는지 확인합니다.
solar_system_analysis.py
# 실제 태양계 행성 궤도 데이터 분석
planets = [
{"name": "수성", "a_AU": 0.387, "e": 0.206, "T_yr": 0.241},
{"name": "금성", "a_AU": 0.723, "e": 0.007, "T_yr": 0.615},
{"name": "지구", "a_AU": 1.000, "e": 0.017, "T_yr": 1.000},
{"name": "화성", "a_AU": 1.524, "e": 0.093, "T_yr": 1.881},
{"name": "목성", "a_AU": 5.203, "e": 0.049, "T_yr": 11.86},
{"name": "토성", "a_AU": 9.537, "e": 0.057, "T_yr": 29.46},
]
print(f"{'행성':^6} {'이심률':^8} {'근일점(AU)':^12} {'원일점(AU)':^12} {'장반경(AU)':^12} {'T²/a³':^10}")
print("-" * 65)
for p in planets:
a = p["a_AU"]
e = p["e"]
T = p["T_yr"]
r_min = a * (1 - e)
r_max = a * (1 + e)
kepler3 = T**2 / a**3 # 케플러 제3법칙: T²/a³ ≈ 1
print(f"{p['name']:^6} {e:^8.3f} {r_min:^12.3f} {r_max:^12.3f} {a:^12.3f} {kepler3:^10.4f}")
print()
print("→ T²/a³ 값이 모두 1에 가까울수록 케플러 제3법칙 성립!")
print("→ 이심률이 달라도 a(장반경)가 같으면 T(공전주기)도 같음")
# 실행 결과 (Output)
행성 이심률 근일점(AU) 원일점(AU) 장반경(AU) T²/a³-----------------------------------------------------------------
수성 0.206 0.307 0.467 0.387 1.0009
금성 0.007 0.718 0.728 0.723 0.9999
지구 0.017 0.983 1.017 1.000 1.0000
화성 0.093 1.382 1.666 1.524 1.0001
목성 0.049 4.952 5.454 5.203 0.9997
토성 0.057 8.994 10.080 9.537 0.9998
→ T²/a³ 값이 모두 1에 가까움: 케플러 제3법칙 성립 ✅
→ 수성(e=0.206)과 금성(e=0.007)은 이심률 차이 크지만 T²/a³는 모두 ≈1
실제 태양계 행성 데이터에서도 T²/a³ 값이 모두 1에 매우 가깝게 나옵니다.
이심률이 가장 큰 수성(0.206)도 예외 없이 케플러 제3법칙을 만족합니다.
공전주기는 이심률이 아닌 장반경에 의해서만 결정된다는 것이
실제 데이터로 검증됩니다.
DEEP DIVE
🔭 더 나아간 탐구 아이디어
EXPLORE 01
Pygame으로 행성 공전 애니메이션 구현
이심률이 다른 두 행성이 같은 장반경을 가질 때
공전주기가 정말 같은지 Pygame 애니메이션으로 시각화합니다.
케플러 제2법칙(면적 속도 일정)도 함께 구현하면 이심률이 클수록
근일점 근처에서 빠르게 이동하는 것을 눈으로 확인할 수 있습니다.
EXPLORE 02
역학적 에너지와 장반경의 관계 탐구
왜 장반경이 같으면 역학적 에너지가 같은지
비리알 정리(Virial theorem)를 Python으로 수치 검증합니다.
에너지 E = -GMm/2a 공식이 이심률에 무관함을 코드로 확인하는
물리학과·천문학과 세특으로 확장 가능한 탐구입니다.
EXPLORE 03
혜성 궤도 분석 - 극단적 이심률 탐구
핼리 혜성(e=0.967)처럼 이심률이 매우 큰 천체의 궤도를 분석합니다.
근일점과 원일점의 차이가 극단적으로 벌어지는 경우에도
케플러 법칙이 성립하는지 NASA JPL 실제 데이터로 검증합니다.
EXPLORE 04
수능 출제 유형 분석 프로그램 개발
"장반경 2AU 고정, 이심률만 다른 두 행성의 공전주기 비교" 유형처럼
케플러 법칙 관련 수능 문제 유형을 Python으로 자동 생성하는 프로그램을 만듭니다.
문제 생성 알고리즘 구현 + 정답 자동 채점 기능까지 구현합니다.
SETECH STORY
📝 세특 스토리라인 제안
🎯 지구과학 + 물리 + 정보 세특 연결 흐름
- "이심률이 변하면 장반경도 변해야 하지 않나?" 라는 의문에서 탐구 시작
- r_max = a(1+e), r_min = a(1-e) 수식에서 두 값의 합이 항상 2a임을 수학적으로 유도
- Python 코드로 이심률 0~0.95 구간에서 장반경 보존 수치 검증
- 실제 태양계 6개 행성 데이터로 케플러 제3법칙(T²/a³ ≈ 1) 실증
- Pygame 애니메이션으로 공전주기 동일성 시각화 구현
- "물리 법칙을 수치 시뮬레이션으로 검증하는 방법이 컴공의 핵심임을 깨달음"
수업 시간의 날카로운 질문 하나가
케플러 법칙 → 역학적 에너지 → Python 수치해석 → 시뮬레이션으로 이어지는
의문 → 수학적 분석 → 코드 검증 → 실제 데이터 적용의 스토리가 완성됩니다.
케플러 법칙 → 역학적 에너지 → Python 수치해석 → 시뮬레이션으로 이어지는
의문 → 수학적 분석 → 코드 검증 → 실제 데이터 적용의 스토리가 완성됩니다.
사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'학생부종합전형' 카테고리의 다른 글
| 2028 학생부종합전형,'서류 vs 면접'을 넘어 트랙별로 갈라진다 (3) | 2026.06.05 |
|---|---|
| 적혈구는 미시세계일까,거시세계일까? (6) | 2026.06.02 |
| "5평"은 측정일까,어림일까?단위 논쟁에서 시작한 코딩 탐구 (3) | 2026.05.26 |
| 좋은 학생부는 '흐름'이다주도성 — 학생이 직접 움직인 흔적 (2) | 2026.05.22 |
| 광섬유 속 빛은 왜디지털 신호가 될까?Python으로 직접 구현하기 (3) | 2026.05.18 |