首页 > 其他分享 >manim边学边做--直线类

manim边学边做--直线类

时间:2024-08-22 17:37:36浏览次数:8  
标签:直线 end get -- label start Line 边学边 manim

直线是最常用的二维结构,也是构造其他二维图形的基础。
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)

标签:直线,end,get,--,label,start,Line,边学边,manim
From: https://www.cnblogs.com/wang_yb/p/18374417

相关文章

  • AP5174内置PWM调节LED灯亮度输入5-100V车灯驱动IC 手电筒与车灯方案
    产品描述AP5174是一款效率高,稳定可靠的LED灯恒流驱动控制芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5174采用ESOP8封装,散热片内置接SW脚,通过调节外置电流检测的电阻值来设置流过LED灯的电流,支持外加电压线性调光,最大......
  • 数据库_DuckDB-extension-读取clickhouse数据
    duckdb练习学习sql的新选择-用duckdb代替mysql个人最佳分析数据库01.duckdb和依赖的parquet、httpfs插件02.测试duckdb是否能正常使用OSS,03.在postgresql中使用pg_duckdb访问oss内的parquet文件duckdb扩展duckdb_mysql.DuckDBtodirectlyreadandwri......
  • xlsx-js-style前端组装表格数据下载到本地
    1.数据格式:对象:key/valueconstdata1={'合同主体信息':'{\n"合同编号":"FWTsAEY-S1T-2023-01",\n"项目编号":"FTCG2023000265A",\n"项目名称":"福田区第二人民医院食堂服务采购项直",\n"总计/价款&q......
  • MybatisPlus
    MybatisPlus 一、介绍MybatisPlus是一个Mybatis的增强工具,为简化开发、提升效率而生。功能:自动生成单表的CRUD功能提供丰富的条件拼接方式全自动ORM类型持久层框架 二、简单使用导入mybatis-plus的启动器<dependencies>  <dependency>  ......
  • 海康威视WEBSDK3.3控件开发-分屏预览多个摄像头
    海康威视WEB3.3控件开发包V3.3下载得到海康威视的demo。按照说明文档启动项目。如果是公司内部,一般都是配置好了对应的WiFi,不需要启动NGINX,直接启动.html文件即可海康威视视频教程注意:很多需要海康平台支持,需要付费参考:在vue3中使用海康威视WEB3.3控件开发包V3.......
  • 这是一款轻量存储黑科技!
    近日,天翼云联合InfoQ举办了以“新存储,更轻量”为主题的线上技术分享会。天翼云存储产品线总监潘亚莲以“轻量级存储集群控制器HBlock的设计理念与场景实践”为主题,讲解了HBlock在产品理念、价值主张、应用场景等方面的内容。自研·创新·可控HBlock开启存储新纪元IDC预测,全球20......
  • nvidia系列教程-AGX-Orin 确定gpio编号
    目录前言一、软件版本说明二、debugfs得到gpio三、gpio操作总结前言        NVIDIAJetsonAGXOrin是一款强大的嵌入式AI计算平台,适用于各种复杂的边缘计算任务。对于开发者来说,准确地控制和操作GPIO(通用输入输出)引脚是非常重要的。本文将详细介绍如......
  • Visual C++ 下载安装教程(微软常用运行库合集|dll报错必装)
    前言MicrosoftVisualC++Redistributable(简称MSVC,VB/VC,系统运行库)是Windows操作系统应用程序的基础类型库组件。此版VisualC++运行库组件合集(微软常用运行库合集)由国内封装爱好者@Dreamcast打包而成,整合VisualC++组件安装包运行库所有版本,提供图形安装界面,可自选更新VC++版......
  • RK3588开发笔记-pdm接口ES7201音频采集调试记录
    目录​​​​​​​前言一、ES7201技术规格二、PDM接口说明RK3588的PDM接口特性三、原理图连接四、内核配置五、音频调试总结前言        在RK3588开发过程中,音频采集是一个常见的需求,而PDM(PulseDensityModulation)接口因其简单性和低成本广泛应用......
  • ABC298Ex(2)
    多次询问\(L,R\),求\(\sum\limits_{i}\min(d(i,L),d(i,R))\)。不失一般性的令\(dep_L\gedep_R\)。考虑\(i\)到\(L/R\)的路径是怎样的。一定是\(i\)到\(L\rightarrow\)上的某一点\(x\)再到\(L/R\)。如果按照每个点到达\(L/R\)对其进行染色,则每种颜色都只有一......