如何使球体在 manim 的 3d 平面中做圆周运动?

How to make a sphere move in a circle in 3d plane in manim?

一个球体在做圆周运动。 后来相机倾斜以便从侧面看到它。 从侧面看,好像是来回运动。

要为此设置动画,我必须让一个球体在 3d 平面中转一圈。 但是不能使用 MoveAlongPath 因为我必须控制角度。

这是一个物理 class。我必须证明圆周运动,从侧面看就是来回运动。 我还要计算角度,所以我要控制角度。

有什么建议吗?

我试过这样做

from manim import *

class ThreeDCameraRotation(ThreeDScene):
    def construct(self):
        self.camera.background_color = WHITE

        self.set_camera_orientation(phi=0 * DEGREES, theta=0* DEGREES)

        axes = ThreeDAxes()
        circle = Circle(radius=1, color=RED)

        self.add(circle, axes)

        sphere = Sphere(radius=0.1,color=RED).shift(RIGHT)
        #completed the setup

        self.play(MoveAlongPath(sphere, circle), run_time=3, rate_func=linear)
        #circular motion

        self.move_camera(phi=90 * DEGREES, theta=0 * DEGREES,run_time =2)
        #Camera movement

        self.wait()

        self.move_camera(phi=0 * DEGREES, theta=0 * DEGREES)
        #again camera movement
        self.wait()

但是这段代码的问题在于

  1. 相机视角改变后旋转不继续

    有没有办法在角度变化的同时运行动画?

  2. 角度无法调整

    我希望当半径与 x 轴成 45 度角时停止旋转....

有什么办法吗?

    self.set_camera_orientation(phi=0 * DEGREES, theta=0* DEGREES)

    axes = ThreeDAxes()
    circle = Circle(radius=1, color=RED)
    path = Arc(radius=1, angle=45*DEGREES,stroke_width=0.1)
    self.add(circle, axes)


    sphere = Sphere(radius=0.1,color=RED).shift(RIGHT)
    
    Everything = VGroup()
    Everything.add(axes)
    Everything.add(circle)
    Everything.add(sphere)
    Everything.add(path)
    
    self.play(Rotate(Everything,90*DEGREES,np.array([0,1,0])),MoveAlongPath(sphere, path), run_time=3, rate_func=linear)

    self.wait()

不是移动相机,而是将所有内容放入 VGroup 中并旋转它。这允许您将它与其他动画一起播放。 同样对于 MoveAlongPath,如果您不想完全旋转,只需使用圆弧即可。