from manim import *
import numpy as np
class StellarAberration(Scene):
def construct(self):
# 1. 좌표축 및 설정
title = Text("성수님의 합성식 기반 광행차 분석", font_size=36).to_edge(UP)
self.add(title)
c = 3.0 # 빛의 속도 (시각화용)
v = 1.0 # 지구의 공전 속도
origin = ORIGIN
star_pos = UP * 3
earth_vel = RIGHT * v
# 2. 지구와 별 표시
earth = Dot(color=BLUE).shift(LEFT * 2)
earth_label = Text("지구 (관찰자)", font_size=20).next_to(earth, DOWN)
star = Star(color=YELLOW).shift(UP * 3)
star_label = Text("먼 별", font_size=20).next_to(star, UP)
self.play(FadeIn(earth, earth_label, star, star_label))
# 3. 벡터 합성 묘사 (성수님의 논리)
# 실제 별빛 벡터
c_vector = Arrow(star.get_center(), earth.get_center(), buff=0, color=YELLOW)
c_text = MathTex(r"\vec{c}", color=YELLOW).next_to(c_vector, LEFT)
# 지구 운동 벡터
v_vector = Arrow(earth.get_center(), earth.get_center() + RIGHT * v, buff=0, color=RED)
v_text = MathTex(r"\vec{v}", color=RED).next_to(v_vector, BOTTOM)
self.play(GrowArrow(c_vector), Write(c_text))
self.play(GrowArrow(v_vector), Write(v_text))
self.wait(1)
# 4. 성수님의 합성 벡터 (상대 속도 c')
# 수식: c' = sqrt(c^2 + v^2 - 2cv cos(theta)) 논리 시각화
c_prime_vector = Arrow(star.get_center(), earth.get_center() + RIGHT * v, buff=0, color=GREEN)
c_prime_label = MathTex(r"\vec{c}'_{Sungsoo}", color=GREEN).next_to(c_prime_vector, RIGHT)
self.play(
ReplacementTransform(c_vector.copy(), c_prime_vector),
Write(c_prime_label)
)
# 5. 각도(광행차) 표시
arc = ArcBetweenPoints(
star.get_center() + DOWN * 1,
c_prime_vector.get_start() + (earth.get_center() + RIGHT * v - star.get_center()) * 0.3,
radius=1
)
angle_text = MathTex(r"\alpha", font_size=30).next_to(arc, DOWN)
self.play(Create(arc), Write(angle_text))
# 6. 결론 텍스트
result = Text("성수님의 식에 따른 각도 변화 확인", font_size=24, color=GREEN).to_edge(DOWN)
self.play(Write(result))
self.wait(2)
댓글 0