Manim教程:第五章 动画对象 ——【中】

5.2 三次贝塞尔曲线

5.2.1介绍

1.定义

三次贝塞尔曲线是一种由四个控制点定义的曲线,这四个点通常被称为:

  1. 起始点(P_{0}
  2. 第一个控制点(P_{1}
  3. 第二个控制点(P_{2}
  4. 结束点(P_{3}

数学上,三次贝塞尔曲线的参数方程可以表示为:

B(t)=(1-t)^{3}P_{0}+3(1-t)^{2}P_{1}+3(1-t)^{2}P_{2}+t^{3}P_{3}

其中 𝑡 是从 0 到 1 的参数。当 𝑡=0 时,曲线的位置在 P_{0}​;当 𝑡=1 时,曲线的位置在 P_{3}​。控制点P_{1}​ 和 P_{2} 决定了曲线的形状和弯曲程度。

2.几何特征

  • 曲线的起始和结束点分别对应于 P_{0} 和 P_{3}​。
  • 控制点P_{1}​ 和 P_{2} 不在曲线上,但它们影响曲线的形状,尤其是弯曲的程度和方向。
     

3.应用

三次贝塞尔曲线在多个领域有广泛的应用:

  1. 计算机图形学
    • 用于在矢量图形设计软件(如 Adobe Illustrator 和 CorelDRAW)中绘制平滑曲线。
    • 在 3D 建模和动画中,使用贝塞尔曲线来定义路径和曲面。
  2. 字体设计
    • TrueType 和 PostScript 字体格式使用贝塞尔曲线来描述字符的形状。
  3. 动画
    • 在用户界面和游戏开发中,用来创建流畅的动画效果,例如移动物体沿特定路径的迁移。
  4. 机器人学
    • 用于路径规划,以确保机器人在运动过程中保持平滑的转弯和移动。
  5. 数据可视化
    • 在创建光滑的线条图和插值时使用,例如在统计图表中展示数据趋势。

4.总结

三次贝塞尔曲线是一种极为重要的数学工具,不仅在计算机图形学中扮演着关键角色,同时也在许多其他领域得到应用。它以其灵活性和优雅性解决了许多平滑曲线的需

 

 5.2.2 CubicBezier[三次贝塞尔曲线]

三次贝塞尔曲线icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/qq_45449625/article/details/140581971

CubicBezier(start_anchor, start_handle, end_handle, end_anchor,**kwargs)

 CubicBezier 是一个用于表示三次贝塞尔曲线的对象,通常出现在计算机图形学和动画处理中。三次贝塞尔曲线由四个点定义:

  1. start_anchor:起始锚点,表示曲线的起点。
  2. start_handle:起始控制点,影响曲线起始段的形状。
  3. end_handle:结束控制点,影响曲线结束段的形状。
  4. end_anchor:结束锚点,表示曲线的终点。

这四个点是通过控制点来定义曲线的弯曲程度和方向的。在这个构造函数中,**kwargs 是一个可选参数,可以传递额外的关键字参数。这些参数的具体用途通常取决于实现的上下文,例如可以用于设置曲线的颜色、宽度等属性。

一下是一个实例代码:

CubicBezier(start_anchor=[0,0,0], start_handle=[1, 2,0], end_handle=[2, 2,0], 
                           end_anchor=[3, 0,0],color=RED_C)

在这个例子中:

  • (0, 0) 是曲线的起点。
  • (1, 2) 是影响曲线起始段形状的控制点。
  • (2, 2) 是影响曲线结束段形状的控制点。
  • (3, 0) 是曲线的终点。

具体的实现和功能可能会依赖于你所使用的图形库或者框架。这种类通常会包含方法以计算曲线在给定比例(t值)下的点位置,或者绘制曲线等功能。

实例:

from manim import *
class BezierSplineExample(Scene):
    def construct(self):
        p1 = np.array([-3, 1, 0])
        p1b = p1 + [1, 0, 0]
        d1 = Dot(point=p1).set_color(BLUE)
        l1 = Line(p1, p1b)
        p2 = np.array([3, -1, 0])
        p2b = p2 - [1, 0, 0]
        d2 = Dot(point=p2).set_color(RED)
        l2 = Line(p2, p2b)
        bezier = CubicBezier(p1b, p1b + 3 * RIGHT, p2b - 3 * RIGHT, p2b)
        self.add(l1, d1, l2, d2, bezier)
        beline=CubicBezier(start_anchor=[0,0,0], start_handle=[1,-1,0], end_handle=[2, -2,0], 
                           end_anchor=[3, -2,0],color=RED_C).shift(2*UP)
        a0=Dot(point=[0,0,0]).shift(2*UP)
        
        a3=Dot(point=[3, -2,0]).shift(2*UP)
        self.add(a0,a3,beline)

运行结果:

 5.3.弯曲箭头[CurvedArrow]

应用实例:

CurvedArrow(start_point, end_point, **kwargs)
#star_point(是弯曲箭头的起点
#end_point(是弯曲箭头的结束点
#**kwargs(是别的参数,颜色,曲线粗细等。

实例代码:

from manim import *
class CurvedArrow01(Scene):
    def construct(self):
        a1=CurvedArrow(start_point=[1,0,0],end_point=[4,1,0],color=RED_B)
        self.add(a1)

 运行结果:

5.4.弯曲双箭头[CurvedDoubleArrow]

应用实例。

CurvedDoubleArrow(start_p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yasen.M

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

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

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

打赏作者

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

抵扣说明:

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

余额充值