首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

manim边学边做--直线类

编程知识
2024年08月22日 16:38

直线是最常用的二维结构,也是构造其他二维图形的基础。
manim中针对线性结构提供了很多模块,本篇主要介绍常用的几个直线类的模块。

  1. Line:通用直线
  2. DashedLine:各种类型的虚线
  3. TangentLine:根据已有的几何体,绘制它的切线
  4. LabeledLine:带有标签的直线

其中,DashedLineTangentLineLabeledLine都继承自Line
image.png
直线系列的模块也位于manim中的Mobject之下。

1. 主要参数

模块Line的常用参数有:

参数名称 类型 说明
start Point3D 直线的起点
end Point3D 直线的终点
path_arc float 直线的弯曲程度

Line模块常用的就是startend参数,path_arc参数是调节直线弯曲度的,用的不多。

模块DashedLine除了包含Line的参数之外,还有两个特有的参数:

参数名称 类型 说明
dash_length float 每小段虚线的长度
dashed_ratio float 虚线的疏密程度

模块TangentLine是专门用来绘制切线的,它的参数有:

参数名称 类型 说明
vmob VMobject 绘制切线的几何体,一般是圆形
alpha float 切线围绕在几何体上的方向,范围从0~1
d_alpha float 切线的偏移度,默认是很小的值
length float 切线长度

这里的alpha参数范围从0~1,代表了围绕vmob一周。

模块LabeledLine可以在直线上加一个便签,这在制作动画时非常有用,可以给线段添加说明信息。

参数名称 类型 说明
label str 标签中文字,可支持数学公式
label_position float 标签位置,默认在直线正中间
font_size float 标签字体大小
label_color Color 标签颜色
label_frame bool 是否显示标签背景
frame_fill_color Color 标签背景颜色
frame_fill_opacity float 标签背景透明度

2. 主要方法

模块Line的常用方法有:

名称 说明
get_angle 直线相对于水平方向的角度
get_projection 直线外一点在直线上的投影
get_slot 直线的斜率
get_unit_vector 直线对应的单位向量
get_vector 直线对应的向量
put_start_and_end_on 重新设置直线的起点和终点
set_angle 重新设置直线的角度
set_length 重新设置直线的长度
set_path_arc 重新设置直线的弯曲度
set_points_by_ends 重新设置直线的起点和终点,类似 put_start_and_end_on

通过Line提供的get_*set_*方法,可以灵活的获取直线的信息,进行计算之后,再改变直线的状态。
这在制作数学动画时非常有用。

模块DashedLine的常用方法有:

名称 说明
get_start 虚线的起点
get_end 虚线的终点
get_first_handle 贝塞尔曲线的第一个控制点
get_last_handle 贝塞尔曲线的最后一个控制点

manim中,直线也可以有弯曲度,所以直线都是通过贝塞尔曲线的方式绘制的,
get_first_handleget_last_handle是为了获取贝塞尔曲线的控制点。

模块TangentLineLabeledLine没有自己特殊的方法,但是它们继承自Line的方法基本都可以使用。

3. 使用示例

下面通过示例来演示直线类模块的效果。

3.1. 直线样式

直线Line从形状上看比较简单,能够设置的属性也就是长度,弯曲度等等。

Line(LEFT * 2, RIGHT * 2)
Line(LEFT, RIGHT)
Line(
    LEFT * 1.5,
    ORIGIN,
    path_arc=0.5,
)
Line(
    ORIGIN,
    RIGHT * 1.5,
    path_arc=1.5,
)

out.gif

3.2. 动态改变直线

通过直线的方法,可以动态的改变直线。

l = Line(LEFT * 2, RIGHT * 2)
# 改变长度
l.set_length(2)
# 改变角度
l.set_angle(0.785)
# 改变弯曲度
l.set_path_arc(1)

out.gif

3.3. 虚线样式

虚线DashedLine除了上面直线Line的属性之外,还可以设置自己特有的虚线样式。

start = LEFT * 2
end = RIGHT * 2

DashedLine(start, end)
DashedLine(
    start,
    end,
    dash_length=0.5,
)
DashedLine(
    start,
    end,
    dash_length=1,
    dashed_ratio=0.8,
)
DashedLine(
    start,
    end,
    dashed_ratio=0.1,
)

out.gif

3.4. 切线样式

切线TangentLine本身就是一个普通的直线Line
它的主要作用是制作动画时不用自己去手工计算,就能方便的绘制一个图形的切线。

c = Circle(radius=1).shift(DOWN)

TangentLine(c, alpha=0)
TangentLine(c, alpha=0.125)
TangentLine(c, alpha=0.375)
TangentLine(c, alpha=0.75)

out.gif

3.5. 直线上的标签

LabeledLine在需要给动画中的某些线加说明的时候非常有用。

start = LEFT * 2
end = RIGHT * 2
txt1 = Text("中文说明")
txt2 = Text("标签背景")

LabeledLine(
    label="y=kx+b",
    font_size=25,
    start=start,
    end=end,
)
LabeledLine(
    label=txt1,
    start=start,
    end=end,
)
LabeledLine(
    label="z=\sqrt{x^2+y^2}",
    font_size=25,
    start=start,
    end=end,
    label_color=RED,
    label_frame=False,
)
LabeledLine(
    label=txt2,
    start=start,
    end=end,
    frame_fill_color=GREEN,
    frame_fill_opacity=0.8,
)

out.gif

4. 附件

文中完整的代码放在网盘中了(line.py),
下载地址: 完整代码 (访问密码: 6872)

From:https://www.cnblogs.com/wang_yb/p/18374417
本文地址: http://www.shuzixingkong.net/article/1344
0评论
提交 加载更多评论
其他文章 Cookie,Session Filter,Listener详解
HTTP请求的无状态性 HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前一个请求的状态 无状态的含义 独立性:每次的HTTP请求都是独立的,不依赖于之前的请求,即服务器处理
Cookie,Session Filter,Listener详解 Cookie,Session Filter,Listener详解
WPF 设备输入事件封装
本文主要介绍WPF应用对鼠标输入、触摸屏触笔以及触摸事件的封装 之前有简单说明设备输入类型 WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com) 1、鼠标 - 通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.
【工程应用十一】基于PatchMatch算法的图像修复研究(inpaint)。
这个东西是个非常古老的算法了,大概是2008年的东西,参考资料也有很多,不过基本上都是重复的。最近受一个朋友的需求,前后大概用了二十多天时间去研究,也有所成果,在这里简单的予以记录。图像修复这个东西目前流行的基本都是用深度学习来弄了,而且深度学习的效果还是非常不错的。
【工程应用十一】基于PatchMatch算法的图像修复研究(inpaint)。 【工程应用十一】基于PatchMatch算法的图像修复研究(inpaint)。 【工程应用十一】基于PatchMatch算法的图像修复研究(inpaint)。
Blazor开发框架Known-V2.0.9
V2.0.9 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。本次版本主要是修复一些BUG和表格页面功能增强。 官网:http://known.pumantech.com Gitee: https://gitee.com/known/Known Git
Blazor开发框架Known-V2.0.9 Blazor开发框架Known-V2.0.9 Blazor开发框架Known-V2.0.9
AntSK:在无网络环境中构建你的本地AI知识库的终极指南
亲爱的读者朋友们,我是许泽宇,今天我将深入探讨一个引人注目的开源工具——AntSK。这个工具让您在没有互联网连接的情况下,仍然能够进行人工智能知识库的对话和查询。想象一下,即使身处无网络环境中,您也可以轻松与AI进行愉快的交流,这无疑是非常振奋人心的! 项目地址 您可以在GitHub找到这个项目。
AntSK:在无网络环境中构建你的本地AI知识库的终极指南 AntSK:在无网络环境中构建你的本地AI知识库的终极指南 AntSK:在无网络环境中构建你的本地AI知识库的终极指南
Webpack 核心流程
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:霜序 三个阶段 初始化阶段 初始化参数:从配置文件、配置对象、shell 参数中读取,与默认的配置参数结合得出最后的参数。 创建编译器对象:通过上一步得到的参
Webpack 核心流程 Webpack 核心流程 Webpack 核心流程
国产化适配——银河麒麟V10(1)
前言 为响应国家“信创”建设,公司最近在搞国产化适配,我刚好负责这搞一部分,做个记录吧。 主要包括三块:国产服务器操作系统银河麒麟V10,国产数据库人大金仓kingbase,中间件Tongweb。 这一期记录银河麒麟适配中遇到的一些问题。 系统版本:Kylin Linux Advanced Serv
设计模式之责任链模式
责任链模式是面向对象的23种设计模式中的一种,属于行为模式范围。责任链模式(Chain of Responsibility),见名知意:就是每一个处理请求的处理器组合成一个链表,链表中的每个节点(执行器)都有机会处理发送的请求。 大致的结构是这个样子: 举一个简单的例子:某公司有一名新员工要入职,则
设计模式之责任链模式 设计模式之责任链模式