from manim import *

class QuaternionVsEuler(ThreeDScene):
    def construct(self):
        # 创建两个立方体
        cube_euler = Cube(fill_color=BLUE, fill_opacity=0.7)
        cube_quat = Cube(fill_color=RED, fill_opacity=0.7)
        
        # 欧拉角旋转 (模拟死锁)
        self.play(
            Rotate(cube_euler, angle=PI/2, axis=RIGHT), # 先转X轴
            Rotate(cube_euler, angle=PI/2, axis=UP),    # 再转Y轴 (此时死锁发生)
            run_time=2
        )
        
        # 四元数旋转 (使用球面插值概念)
        # Manim 底层其实也是用四元数处理的
        self.play(
            Rotate(cube_quat, angle=PI, axis=OUT),
            rate_func=smooth, # 平滑函数
            run_time=2
        )