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

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

manim边学边做--圆形类

编程知识
2024年08月15日 16:47

manim的丰富图形库中,圆形类是一个基础且强大的模块。
无论是简单的圆形绘制,还是复杂的圆形变换,它都能以简洁的代码实现。

manim中圆形类的相关模块主要有3个:

  1. Circle:标准的圆形
  2. Annulus:圆环形状
  3. Ellipse:椭圆形状

其中,AnnulusEllipse继承自Circle
image.png
圆形系列处于manim中的Mobject之下。

1. 主要参数

Circle对象的属性不多,主要有:

参数名称 类型 说明
radius float 半径
color str 颜色
stroke_width float 边框厚度
fill_opacity float 透明度

圆环Annulus对象的主要属性有:

参数名称 类型 说明
inner_radius float 内圈半径
outer_radius float 外圈半径
color str 颜色
mark_paths_closed bool TODO

Annulus会渲染inner_radiusouter_radius之间的部分,也就是一个环。

椭圆Ellipse对象的主要属性有:

参数名称 类型 说明
width float 椭圆宽度
height float 椭圆高度

椭圆的宽度和高度设置成一样的时候,就是标准的

2. 主要方法

Circle对象有3个常用的方法:

名称 说明
from_three_points 根据3个点画圆
point_at_angle 返回某个点在圆上的位置
surround 修改一个圆,使其围绕给定的对象

上面方法的使用方法参见下面的使用示例章节。

圆环Annulus和椭圆Ellipse没有常用的方法。

3. 使用示例

3.1. 大小和颜色

对于圆Circle来说,通过半径radius来调节大小;
对于圆环Annulus来说,通过内半径inner_radius和外半径outer_radius来调节环的大小和粗细;
对于椭圆Ellipse来说,通过widthheight来调节椭圆的大小和扁平程度。

三种形状的颜色都是color属性。

# 圆形
Circle(radius=0.1, color=RED)
Circle(radius=0.3, color=BLUE)
Circle(radius=0.5, color=YELLOW)

# 圆环
Annulus(
    inner_radius=0.1,
    outer_radius=0.2,
    color=RED,
)
Annulus(
    inner_radius=0.4,
    outer_radius=0.5,
    color=BLUE,
)
Annulus(
    inner_radius=0.4,
    outer_radius=0.8,
    color=YELLOW,
)

# 椭圆
Ellipse(
    width=0.3,
    height=0.1,
    color=RED,
)
Ellipse(
    width=0.8,
    height=0.4,
    color=BLUE,
)
Ellipse(
    width=1.8,
    height=1,
    color=YELLOW,
)

效果如下:
out.gif

3.2. 根据三个点画圆

除了通过上面设置半径radius的方式来画圆,还可以根据任意三个点来生成一个圆形。
使用from_three_points方法。

d1 = Dot(RIGHT, color=RED)
d2 = Dot(UL, color=BLUE)
d3 = Dot(DR, color=GREEN)

Circle.from_three_points(
    d1.get_center(),
    d2.get_center(),
    d3.get_center(),
    color=YELLOW,
)

out.gif

3.3. 获取圆上某个点

通过方法point_at_angle,我们可以根据角度来获取圆上的某一个点。
manim将整个圆最右边的点(和圆心在同一高度上)作为角度为\(0^\circ\)的点,
然后逆时针方向逐渐增加角度。

c = Circle(radius=2, color=YELLOW)

# 60度的点
p1 = c.point_at_angle(PI / 6)

# 180度的点
p2 = c.point_at_angle(PI)

# 270度的点
p3 = c.point_at_angle(3 * PI / 2)

out.gif

3.4. 用圆环绕其他图形

最后,还有一个surround方法,它的主要作用是将圆环绕在另一个图形上。
surround方法有个buffer_factor 参数,
buffer_factor >= 1时,圆形环绕在图形外部;当buffer_factor < 1时,圆形在图形内部。

# 星形图形
star = Star()
# buffer_factor=1
# 所以环绕在星形外部
Circle().surround(star, buffer_factor=1)

# 十字线图形
vg = VGroup(
    Line(UP / 2, DOWN / 2),
    Line(LEFT / 2, RIGHT / 2),
)
# 默认 buffer_factor=1.2
# 所以环绕在十字线外部
Circle().surround(vg)

# 三角图形
t = Triangle()
# buffer_factor<1
# 所以圆形在三角形内部
Circle().surround(t, buffer_factor=0.3)

out.gif

4. 附件

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

From:https://www.cnblogs.com/wang_yb/p/18361469
本文地址: http://shuzixingkong.net/article/1137
0评论
提交 加载更多评论
其他文章 CH03_布局
第3章:布局 本章目标 理解布局的原则 理解布局的过程 理解布局的容器 掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素。为在WPF 窗口中放置多个元素并创建更贴近实用的用户男面,需要在窗口上放置一个容器,然后在这个容器中添加其他元素。造成这一限制的
CH03_布局 CH03_布局 CH03_布局
深入理解单元测试:技巧与最佳实践
之前分享过如何快速上手开源项目以及如何在开源项目里做集成测试,但还没有讲过具体的实操。 今天来详细讲讲如何写单元测试。 &#129300;什么情况下需要单元测试 这个大家应该是有共识的,对于一些功能单一、核心逻辑、同时变化不频繁的公开函数才有必要做单元测试。 对于业务复杂、链路繁琐但也是核心流程的功
深入理解单元测试:技巧与最佳实践 深入理解单元测试:技巧与最佳实践 深入理解单元测试:技巧与最佳实践
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(5)-Wireshark捕获设置
1.简介 WireShark的强大之处就在于不用你再做任何配置就可以抓取http或者https的包。今天宏哥主要是讲解和分享如何使用WireShark抓包。 2.运行Wireshark 安装好 Wireshark 以后,就可以运行它来捕获数据包了。方法如下: 1.在 Windows 的“开始”菜单中
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(5)-Wireshark捕获设置 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(5)-Wireshark捕获设置 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(5)-Wireshark捕获设置
CH01_WPF概述
第1章:WPF概述 本章目标 了解Windows图形演化 了解WPF高级API 了解分辨率无关性概念 了解WPF体系结构 了解WPF 4.5 WPF概述 ​ 欢迎使用 Windows Presentation Foundation (WPF) 桌面指南,这是一个与分辨率无关的 UI 框架,使用基于矢
CH01_WPF概述 CH01_WPF概述 CH01_WPF概述
你还纠结996吗?2024年互联网公司工作时长排行榜出炉!
2024年互联网公司工作时长排行榜新鲜出炉!在这个竞争激烈的行业中,工作时长一直是人们关注的热点话题。你还在纠结996工作制吗?也许这份排行榜会给你一些意想不到的答案。 为什么一些公司依旧推行996,而另一些公司却在努力减少员工的工作时间?在工作时长与员工幸福感之间,究竟该如何找到平衡点? 在这份最
你还纠结996吗?2024年互联网公司工作时长排行榜出炉! 你还纠结996吗?2024年互联网公司工作时长排行榜出炉! 你还纠结996吗?2024年互联网公司工作时长排行榜出炉!
基于MonoGame重制《俄罗斯方块》游戏
两年前,我使用C#基于MonoGame编写了一款《俄罗斯方块》游戏,相关介绍可以参考【这篇文章】。最近,使用业余时间将之前的基于MonoGame的游戏开发框架重构了一下,于是,也就趁此机会将之前的《俄罗斯方块》游戏也重制一次,加入了许多我一直打算加入的功能,甚至包括提供跨平台的版本。 先说说这个游戏
基于MonoGame重制《俄罗斯方块》游戏 基于MonoGame重制《俄罗斯方块》游戏 基于MonoGame重制《俄罗斯方块》游戏
mysql数据库中decimal数据类型比较大小
本文简要介绍了如何在MySQL中使用DECIMAL数据类型,并通过标准的SQL查询来比较这些数值的大小。这对于处理需要高精度计算的财务数据或任何其他需要精确数值比较的场景都非常有用。
Java的值传递和引用传递
网络上能搜索到的资料里,关于Java到底是值传递还是引用传递的讨论是比较多的,也没有一个特别被大家认可的结论。 因为最近一两年转到了Golang的开发,接触到了比较多的指针的玩法,突然对Java的引用传递和值传递又有了一定的兴趣。 但是我无意于讨论Java到底是值传递还是引用传递,我只是记录一下,避