manim边学边做--曲线类

news/2024/9/20 9:59:16/文章来源:https://www.cnblogs.com/wang_yb/p/18396028

manim曲线,除了前面介绍的圆弧类曲线,也可以绘制任意的曲线。

manim中提供的CubicBezier模块,可以利用三次贝塞尔曲线的方式绘制任意曲线。

关于贝塞尔曲线的介绍,可以参考:https://en.wikipedia.org/wiki/B%C3%A9zier_curve。

本文主要介绍贝塞尔曲线和两种带箭头的曲线的模块。

  1. CubicBezier:三次贝塞尔曲线,可以绘制平面上的任意曲线
  2. CurvedArrow:单箭头曲线
  3. CurvedDoubleArrow:双箭头曲线

1. 主要参数

CurvedArrowCurvedDoubleArrow的主要参数就是曲线的起点和终点,

这两个模块继承自ArcBetweenPoints模块。

参数名称 类型 说明
start Point3D 起点
end Point3D 终点

CubicBezier模块的参数是四个点,建议先了解三次贝塞尔曲线的原理,然后就能明白这4个参数的意义。

参数名称 类型 说明
start_anchor Point3D 起点
start_handle Point3D 第一个控制点,影响曲线起点到中间部分的弯曲方向
end_handle Point3D 第二个控制点,影响曲线中间部分到终点的弯曲方向
end_anchor Point3D 终点

比如下面的贝塞尔曲线,其中:

  • $ P_0 $相当于参数start_anchor
  • $ P_1
    $相当于参数start_handle
  • $ P_2 $相当于参数end_handle
  • $ P_4 $相当于参数end_anchor

2. 使用示例

2.1. 带箭头的曲线

带箭头的曲线由起点开始沿逆时针方向旋转到终点

CurvedArrow(LEFT / 2 + UP,RIGHT / 2 + UP,color=BLUE,
)
CurvedArrow(LEFT + UP / 2,RIGHT + UP / 2,color=RED,
)
CurvedDoubleArrow(LEFT * 2 + UP / 2,RIGHT * 2 + UP / 2,color=YELLOW,
)CurvedDoubleArrow(RIGHT * 2 + DOWN * 1.6,LEFT * 2 + DOWN * 1.6,color=YELLOW,
)
CurvedArrow(RIGHT + DOWN * 1.6,LEFT + DOWN * 1.6,color=RED,
)
CurvedArrow(RIGHT / 2 + DOWN * 2.1,LEFT / 2 + DOWN * 2.1,color=BLUE,
)

2.2. 贝塞尔曲线绘制过程

贝塞尔曲线通过四个点就能绘制出非常平滑的曲线,其中的原理网络上有很多文章介绍,这里不再赘述。

下面通过一个动画演示其绘制的原理。

  1. 白色的点:用于绘制贝塞尔曲线的4个固定点
  2. 蓝色点:根据4个白色点计算得出
  3. 红色点:根据3个蓝色点计算得出
  4. 黄色点:根据2个红色点计算得出

蓝色点沿着白色点连接的线移动,红色点随蓝色点联动,黄色点随红色点联动,

黄色点的运动轨迹就是绘制出的曲线。

有了CubicBezier模块,可以根据四个点直接绘制贝塞尔曲线,效果和上面的一样,只是代码会简化很多。

points = [LEFT * 2 + DOWN,LEFT + UP,RIGHT * 1.5 + UP,RIGHT * 2 + DOWN,
]CubicBezier(points[0],points[1],points[2],points[3],color=YELLOW,
)

2.3. 绘制爱心

贝塞尔曲线可以绘制非常光滑的曲线,理论上可以绘制各种复杂的曲线图形。

下面尝试用三次贝塞尔曲线来绘制一个爱心的图案。

points = [2 * DOWN * 0.5,2 * LEFT,2 * (LEFT + UP),2 * UP * 0.5,
]
# 左半部分
CubicBezier(points[0],points[1],points[2],points[3],color=RED,
)points = [2 * DOWN * 0.5,2 * RIGHT * 1,2 * (RIGHT * 1 + UP),2 * UP * 0.5,
]
# 右半部分
CubicBezier(points[0],points[1],points[2],points[3],color=GREEN,
)

3. 附件

文中完整的代码放在网盘中了(bezier.py),

下载地址: 完整代码 (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/792014.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb获取手机电池信息

1、获取手机电池信息adb shell dumpsys battery字段说明Current Battery Service state:AC powered: true #交流供电USB powered: false #usb供电Wireless powered: false #无线供电Max charging current: 75000 #最大充电电流Max charging volt…

在pycharm中使用copilot

一、注册、获取使用权限 什么双密码验证、学生验证的过程就不重复了,按网上的教程来就行。 需要注意的是,Github学生认证通过之后,并不是能够立马使用copilot,得等三天copilot的免费使用权限才会批下来。 二、在pycharm中使用copilot 1、安装插件、登录Github等,按照网上的…

若依项目pom文件添加jar包已依赖报红,dependency not found,提示找不到jar包

原因很简单,因为我写在了父项目的pom文件中,写在了 里面。这里只是对依赖的版本进行管理。点击查看代码<!-- 依赖声明 --><dependencyManagement><dependencies>正确的做法应该是在子项目中的pom文件中引入对应依赖,在父项目的pom文件中填上对应的依赖版…

0 JavaScript高级程序设计(第4版)【JS红宝书】【详细思维导图】【持续更新】

ProcessOn访问链接 JavaScript高级程序设计(第4版)阅读路线图,涵盖:基本知识进阶内容BOM和DOMJavascript APIJavaScript设计模式和实践策略ProcessOn访问链接本文来自博客园,作者:muling9955,转载请注明原文链接:https://www.cnblogs.com/muling-blog/p/18395904

架构师备考的一些思考

前言 之前的python-pytorch的系列文章还没有写完,只是写到卷积神经网络。因为我报名成功了系统架构师的考试,所以决定先备考,等考完再继续写。 虽然架构师证书不能证明技术水平,但在现实生活中的某些情况下是有意义的。考试虽然无聊,但有些考题还是蛮有意思的。 思考 看了…

vissim检测路段通过车辆数-cnblog

vissim记录(vs4.3) 目录vissim记录(vs4.3)1.数据收集点设置2. 数据采集配置设置3. 结果查看设置数据收集点,进行截面数据统计1.数据收集点设置2. 数据采集配置设置我是五岔口,就设置了五组 还没完继续配置,选择要采集的数据。如果只需要统计通过车辆数,则只选择number veh3…

OpenTelemetry 实战:gRPC 监控的实现原理

前言最近在给 opentelemetry-java-instrumentation 提交了一个 PR,是关于给 gRPC 新增四个 metrics:rpc.client.request.size: 客户端请求包大小 rpc.client.response.size:客户端收到的响应包大小 rpc.server.request.size:服务端收到的请求包大小 rpc.server.response.si…

ICMAN液位检测方案

非接触式液位检测提醒方案TA是什么? ICMAN液位检测是基于双通道比较电容式液位检测原理,来判断容器中是否有液体或者液体是否达到一定高度。 有什么用? ICMAN液位检测可以实现非接触式检测,起到高低、不同液位提醒、缺水提醒、溢水提醒等作用,让我们的生产生活更加安全、便…

产品经理必修课:掌握API接口的艺术

https://img2024.cnblogs.com/blog/3506472/202409/3506472-20240904094832404-843025212.png在数字化时代,产品经理(PM)的角色已经远远超出了传统的产品规划和市场定位。现代产品经理需要具备跨领域的技术理解能力,其中一项关键技能就是对API接口的深入理解。API(应用程序…

WebShell流量特征检测_冰蝎篇

80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马? 1、定义 顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上…