You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manim 3D硬币翻转动画问题:底部无法转到前方求助

问题分析与解决

你的问题出在Dot是2D平面元素——Manim中所有2D图形默认会保持面向摄像机(类似“广告牌”效果),所以不管你怎么旋转整个Coin组,正反面的Dot都只会对着镜头,永远不会转到背面去。

修复方案

把正反面的Dot替换成3D可旋转的图形,比如带厚度的Circle,这样就能跟着Coin组一起完成3D旋转,实现翻面效果。

修改后的代码如下:

from manim import *

class Coin(VGroup):
    def __init__(self, radius=1, height=None, **kwargs):
        super().__init__(**kwargs)

        if height is None:
            height = radius / 4

        # 用3D Circle替代Dot,设置depth让它有厚度(可选,更真实)
        self.top = Circle(radius=radius, color=GOLD_D, fill_opacity=1)
        self.top.set_depth(height * 0.1)  # 给正面加一点厚度
        self.top.move_to(OUT * height/2)
        # 确保Circle在3D空间中正确朝向
        self.top.rotate(90 * DEGREES, RIGHT)

        self.bottom = self.top.copy()
        self.bottom.set_color(RED)
        self.bottom.move_to(IN * height/2)

        self.edge = Cylinder(radius=radius, height=height)
        self.edge.set_fill(GREY, opacity=1)
        self.edge.rotate(90 * DEGREES, OUT)
        
        self.add(self.edge, self.bottom, self.top)

class CoinFlip(ThreeDScene):
    def construct(self):
        # 3D场景需要设置摄像机角度
        self.set_camera_orientation(phi=60 * DEGREES, theta=-45 * DEGREES)
        c = Coin()
        
        # 播放翻转动画,PI*2可完成完整翻面
        self.play(Rotate(c, PI*2, axis=RIGHT, about_point=ORIGIN), run_time=3)
        self.wait()

关键改动说明

  • 替换Dot为Circle并添加set_depth:让正反面变成可3D旋转的实体,不再固定面向镜头
  • 将Scene改为ThreeDScene:启用3D场景支持,设置摄像机初始角度才能看到正确的3D效果
  • 调整旋转角度为PI*2:完成完整的翻面循环,更直观看到正反面切换

内容的提问来源于stack exchange,提问作者rusiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:39:58