Manim学习:向量的定点旋转

        旋转是在二维或三维空间中沿着一个中心点或轴线旋转物体的一种运动方式。在计算机图形学中,旋转是一项重要的操作,可以通过旋转变换来改变物体的方向和位置。有两种常见的旋转方式:定点旋转和给定点旋转。 定点旋转是指围绕一个固定的中心点旋转物体。在这种旋转方式下,物体的旋转轴是固定的,而物体的位置和方向会随着旋转发生变化。

        这种旋转方式常用于模拟物体绕自身中心旋转的效果,比如一个钟表指针绕自己的中心旋转。 给定点旋转是指围绕一个给定的点旋转物体。在这种旋转方式下,物体围绕一个特定的点进行旋转,这个点可以是任意位置。给定点旋转可以实现物体在空间中围绕不同的轴线旋转,从而实现更加灵活的旋转效果。 通过定点旋转和给定点旋转,我们可以实现对物体在空间中的旋转操作,从而实现更加生动和多样化的图形效果。

        这些旋转方式在计算机图形学中被广泛应用,帮助我们实现更加真实和生动的图形表现。前面的内容都看过,向量的移动过程,都是平移的,没有出现旋转,定点旋转和给定点旋转。接下来看一下,一下集中旋转方式。

1.平行移动

        #向量
        vec_OC=Arrow(start=dot,end=vec_minus_B_copy.get_end(),buff=0, color=YELLOW)
        self.play(Create(vec_OC))
        toc_ = MathTex(r"\vec{oc'}")
        origin_text_oc_ = toc_.next_to(vec_OC.get_end(),6*LEFT+7*UP)
        self.play(Create(origin_text_oc_))              
        self.wait(1)
        
        #平行移动的向量
        vec_OC1=Arrow(start=dot,end=vec_minus_B_copy.get_end(),buff=0, color=YELLOW)
        vec_AB_OC1 =vec_OC1.copy() .shift(3*UP+LEFT)
        self.play(Transform(vec_OC1,vec_AB_OC1))

上面内容就发现,移动的方法就是:.shift(3*UP+LEFT)。平行移动的时候上下左右移动的方式机型操作。比较简单。‘

2.按照给定点旋转

#随机移动向量。
from manim import *
class RotateVector(Scene):
    def construct(self):
        
        numberplane = NumberPlane()
        dot = Dot(ORIGIN)
        self.add(numberplane, dot)
        tB = Text("O").next_to(dot, LEFT+DOWN)
       
        start_point = dot.get_center()
        end_point = [4, 3, 0]
        vector = Arrow(start=start_point, end=end_point)
        
        target_start_position = np.array([2, 2, 0])
        target_end_position = np.array([2, -3, 0])

        self.add(vector)
        self.play(vector.animate.put_start_and_end_on(target_start_position,
 target_end_position))
        self.wait(2)

这代码上看到,先创建一个向量,然后选择按照要求旋转的位置。然后利用函数进行旋转到指定的位置vector.animate.put_start_and_end_on(“移动的位置”)。

运行结果。

3.定点旋转

from manim import *

class RotateVector01(Scene):
    def construct(self):
        
        numberplane = NumberPlane()
        self.add(numberplane)
        
        start_point = [0, 0, 0]
        end_point = [2, 3, 0]
        
        vector = Arrow(start=start_point, end=end_point, buff=0, color=BLUE)
        self.play(Create(vector))
        
        rotated_vector = vector.copy()
        target_angle = 3*PI  # 设置目标旋转角度为π
        rotation_speed = 0.15  # 设置旋转速度
        
        self.play(Rotate(rotated_vector, angle=target_angle, 
about_point=start_point,run_time=1/rotation_speed))
        self.wait()

这能实现圆规旋转。这主要用Rotate(rotated_vector, angle=target_angle, 
about_point=start_point,run_time=1/rotation_speed)函数实现目标

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值