翼度科技»论坛 编程开发 python 查看内容

manim边学边做--直线类

6

主题

6

帖子

18

积分

新手上路

Rank: 1

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

  • Line:通用直线
  • DashedLine:各种类型的虚线
  • TangentLine:根据已有的几何体,绘制它的切线
  • LabeledLine:带有标签的直线
其中,DashedLine,TangentLine和LabeledLine都继承自Line。

直线系列的模块也位于manim中的Mobject之下。
1. 主要参数

模块Line的常用参数有:
参数名称类型说明startPoint3D直线的起点endPoint3D直线的终点path_arcfloat直线的弯曲程度Line模块常用的就是start和end参数,path_arc参数是调节直线弯曲度的,用的不多。
模块DashedLine除了包含Line的参数之外,还有两个特有的参数:
参数名称类型说明dash_lengthfloat每小段虚线的长度dashed_ratiofloat虚线的疏密程度模块TangentLine是专门用来绘制切线的,它的参数有:
参数名称类型说明vmobVMobject绘制切线的几何体,一般是圆形alphafloat切线围绕在几何体上的方向,范围从0~1d_alphafloat切线的偏移度,默认是很小的值lengthfloat切线长度这里的alpha参数范围从0~1,代表了围绕vmob一周。
模块LabeledLine可以在直线上加一个便签,这在制作动画时非常有用,可以给线段添加说明信息。
参数名称类型说明labelstr标签中文字,可支持数学公式label_positionfloat标签位置,默认在直线正中间font_sizefloat标签字体大小label_colorColor标签颜色label_framebool是否显示标签背景frame_fill_colorColor标签背景颜色frame_fill_opacityfloat标签背景透明度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_handle和get_last_handle是为了获取贝塞尔曲线的控制点。
模块TangentLine和LabeledLine没有自己特殊的方法,但是它们继承自Line的方法基本都可以使用。
3. 使用示例

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

直线Line从形状上看比较简单,能够设置的属性也就是长度,弯曲度等等。
  1. Line(LEFT * 2, RIGHT * 2)
  2. Line(LEFT, RIGHT)
  3. Line(
  4.     LEFT * 1.5,
  5.     ORIGIN,
  6.     path_arc=0.5,
  7. )
  8. Line(
  9.     ORIGIN,
  10.     RIGHT * 1.5,
  11.     path_arc=1.5,
  12. )
复制代码

3.2. 动态改变直线

通过直线的方法,可以动态的改变直线。
  1. l = Line(LEFT * 2, RIGHT * 2)
  2. # 改变长度
  3. l.set_length(2)
  4. # 改变角度
  5. l.set_angle(0.785)
  6. # 改变弯曲度
  7. l.set_path_arc(1)
复制代码

3.3. 虚线样式

虚线DashedLine除了上面直线Line的属性之外,还可以设置自己特有的虚线样式。
  1. start = LEFT * 2
  2. end = RIGHT * 2
  3. DashedLine(start, end)
  4. DashedLine(
  5.     start,
  6.     end,
  7.     dash_length=0.5,
  8. )
  9. DashedLine(
  10.     start,
  11.     end,
  12.     dash_length=1,
  13.     dashed_ratio=0.8,
  14. )
  15. DashedLine(
  16.     start,
  17.     end,
  18.     dashed_ratio=0.1,
  19. )
复制代码

3.4. 切线样式

切线TangentLine本身就是一个普通的直线Line。
它的主要作用是制作动画时不用自己去手工计算,就能方便的绘制一个图形的切线。
  1. c = Circle(radius=1).shift(DOWN)
  2. TangentLine(c, alpha=0)
  3. TangentLine(c, alpha=0.125)
  4. TangentLine(c, alpha=0.375)
  5. TangentLine(c, alpha=0.75)
复制代码

3.5. 直线上的标签

LabeledLine在需要给动画中的某些线加说明的时候非常有用。
  1. start = LEFT * 2
  2. end = RIGHT * 2
  3. txt1 = Text("中文说明")
  4. txt2 = Text("标签背景")
  5. LabeledLine(
  6.     label="y=kx+b",
  7.     font_size=25,
  8.     start=start,
  9.     end=end,
  10. )
  11. LabeledLine(
  12.     label=txt1,
  13.     start=start,
  14.     end=end,
  15. )
  16. LabeledLine(
  17.     label="z=\sqrt{x^2+y^2}",
  18.     font_size=25,
  19.     start=start,
  20.     end=end,
  21.     label_color=RED,
  22.     label_frame=False,
  23. )
  24. LabeledLine(
  25.     label=txt2,
  26.     start=start,
  27.     end=end,
  28.     frame_fill_color=GREEN,
  29.     frame_fill_opacity=0.8,
  30. )
复制代码

4. 附件

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

来源:https://www.cnblogs.com/wang_yb/p/18374417
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具