如何使球体在 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()
但是这段代码的问题在于
相机视角改变后旋转不继续
有没有办法在角度变化的同时运行动画?
角度无法调整
我希望当半径与 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,如果您不想完全旋转,只需使用圆弧即可。
一个球体在做圆周运动。 后来相机倾斜以便从侧面看到它。 从侧面看,好像是来回运动。
要为此设置动画,我必须让一个球体在 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()
但是这段代码的问题在于
相机视角改变后旋转不继续
有没有办法在角度变化的同时运行动画?
角度无法调整
我希望当半径与 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,如果您不想完全旋转,只需使用圆弧即可。