制作數學視頻時,各類幾何圖形是使用最頻繁的,
一般來說,常用的幾何圖形包括:點,線,圓以及多邊形,
1. 點
點是最簡單圖形,也是其他所有圖形的基礎,
繪制其他任何圖形時,都是用點來定位的,
manim中生成一個點很方便,只要給定一個坐標即可,
這里的坐標包含 [x, y, z]3個維度,如果繪制二維圖形,將第三個坐標 z固定為 0,
class DotSample(Scene):
def construct(self):
# 繪制 9個點
for x in range(-1, 2):
for y in range(1, -2, -1):
p = Dot([x, y, 0])
self.play(Create(p), run_time=0.5)
按照 3x3的格式繪制9個點
manim -p .\samples.py DotSample

2. 線
manim的線其實都是線段,繪制線只要提供兩個點的坐標,
2.1 直線
提供任意2個點,manim通過 Line來繪制線,
class LineSample(Scene):
def construct(self):
self._lines()
def _lines(self):
# 繪制 3 條線
l = Line([-1, 1, 0], [1, 1, 0])
self.play(Create(l), run_time=0.5)
l = Line([-1, 0, 0], [1, 0, 0])
self.play(Create(l), run_time=0.5)
l = Line([-1, -1, 0], [1, -1, 0])
self.play(Create(l), run_time=0.5)
運行效果:

2.2 帶箭頭的線
繪制帶箭頭的線同樣只要提供2個點,
只是繪制的物件不用 Line,而是用 Arrow,
class LineSample(Scene):
def construct(self):
self._arrows()
def _arrows(self):
a = Arrow([-1, 1, 0], [1, 1, 0])
self.play(Create(a), run_time=0.5)
a = Arrow([-1, 0, 0], [1, 0, 0])
self.play(Create(a), run_time=0.5)
a = Arrow([-1, -1, 0], [1, -1, 0])
self.play(Create(a), run_time=0.5)
運行效果:

2.3 虛線
繪制虛線使用 DashedLine,
class LineSample(Scene):
def construct(self):
self._dashedLines()
self.wait()
def _dashedLines(self):
dl = DashedLine([-1, 1, 0], [1, 1, 0])
self.play(Create(dl), run_time=0.5)
dl = DashedLine([-1, 0, 0], [1, 0, 0])
self.play(Create(dl), run_time=0.5)
dl = DashedLine([-1, -1, 0], [1, -1, 0])
self.play(Create(dl), run_time=0.5)
運行效果:

3. 圓
繪制圓只要提供半徑即可,圓心默認在螢屏的中心,
繪制圓使用 Circle,
class CircleSample(Scene):
def construct(self):
self._circles()
self.wait()
def _circles(self):
c = Circle(radius=1)
self.play(Create(c), run_time=0.5)
c = Circle(radius=2)
self.play(Create(c), run_time=0.5)
c = Circle(radius=3)
self.play(Create(c), run_time=0.5)
運行效果:

3.1 橢圓
manim也支持繪制橢圓,使用 Ellipse,
繪制橢圓的兩個引數 width和 height分別控制橢圓最大寬度和最大高度,
class CircleSample(Scene):
def construct(self):
self._ellipses()
self.wait()
def _ellipses(self):
e = Ellipse(width=1, height=0.5)
self.play(Create(e), run_time=0.5)
e = Ellipse(width=2, height=1)
self.play(Create(e), run_time=0.5)
e = Ellipse(width=3, height=1.5)
self.play(Create(e), run_time=0.5)
運行效果:

3.2 圓弧
manim中繪制圓弧主要有三個引數:
- angle:圓弧的弧度
- start_angle: 開始的角度,默認 0
- radius:圓弧的半徑
class CircleSample(Scene):
def construct(self):
self._arcs()
self.wait()
def _arcs(self):
# 90度圓弧,半徑1
a = Arc(angle=PI / 2, radius=1)
self.play(Create(a), run_time=0.5)
# 180度圓弧,半徑2
a = Arc(angle=PI, radius=2)
self.play(Create(a), run_time=0.5)
# 30度圓弧,半徑2,從270度開始繪制
a = Arc(angle=PI / 6, start_angle=PI * 1.5, radius=2)
self.play(Create(a), run_time=0.5)
運行效果:

4. 多邊形
如果制作幾何相關的數學視頻,那么多邊形絕對是使用最多的,
manim對多邊形的支持非常完善,常用的主要以下幾種:
4.1 等邊三角形
manim中專門有繪制等邊三角形的物件 Triangle,
class PolygonSample(Scene):
def construct(self):
self._triangles()
self.wait()
def _triangles(self):
t = Triangle()
self.play(Create(t))
運行效果:

4.2 四邊形
四邊形比三角形應用的更廣,所以 manim也提供了更多繪制四邊形的方法,
4.2.1 正方形
繪制正方形主要有一個引數,就是 side_length(正方形的邊長),
class PolygonSample(Scene):
def construct(self):
self._squares()
self.wait()
def _squares(self):
s = Square(side_length=1)
self.play(Create(s), run_time=0.5)
s = Square(side_length=1.5)
self.play(Create(s), run_time=0.5)
s = Square(side_length=2)
self.play(Create(s), run_time=0.5)
運行效果:

4.2.2 矩形
繪制矩形有兩個主要的引數,分別代表矩形的高 height和寬 width,
class PolygonSample(Scene):
def construct(self):
self._rectangles()
self.wait()
def _rectangles(self):
r = Rectangle(width=1.5, height=1)
self.play(Create(r), run_time=0.5)
r = Rectangle(width=2, height=1.5)
self.play(Create(r), run_time=0.5)
r = Rectangle(width=3, height=2)
self.play(Create(r), run_time=0.5)
運行效果:

4.2.3 圓角矩形
圓角矩形和矩形相比,多了一個引數corner_radius用來控制矩形四個角的弧度半徑,
也就是控制矩形四個角的圓滑程度,
class PolygonSample(Scene):
def construct(self):
self._rounded_rectangles()
self.wait()
def _rounded_rectangles(self):
r = RoundedRectangle(corner_radius=0.2, width=1.5, height=1)
self.play(Create(r), run_time=0.5)
r = RoundedRectangle(corner_radius=0.4, width=2, height=1.5)
self.play(Create(r), run_time=0.5)
r = RoundedRectangle(corner_radius=0.6, width=3, height=2)
self.play(Create(r), run_time=0.5)
運行效果:

4.3 任意多邊形
除了三角形和四邊形,manim還提供了一個通用的Polygon物件,它會依次連接傳入的坐標點串列,繪制任意多邊形,
class PolygonSample(Scene):
def construct(self):
self._polygons()
self.wait()
def _polygons(self):
p = Polygon([-3, 1, 0], [-1, 1, 0], [-2, -1, 0])
self.play(Create(p), run_time=0.5)
p = Polygon([1, 1, 0], [2, 0, 0], [3, 1, 0], [3, -1, 0], [1, -1, 0])
self.play(Create(p), run_time=0.5)
運行效果:

4.4 正多邊形
雖然 manim提供了繪制任意多邊形的物件 Polygon,利用Polygon繪制正多邊形理論上是完全可行的,
不過,要自己去計算各個正多邊形的坐標點顯然有些費時費力,
所以,manim中還提供了一個專門用來繪制正多邊形的物件 RegularPolygon.
class PolygonSample(Scene):
def construct(self):
self._reguler_polygons()
self.wait()
def _reguler_polygons(self):
p1 = RegularPolygon(n=6) # 正六邊形
p2 = RegularPolygon(n=8) # 正八邊形
p3 = RegularPolygon(n=10) # 正十邊形
vg = VGroup(p1, p2, p3)
vg.arrange(RIGHT, buff=SMALL_BUFF)
self.play(Create(vg))
運行效果:

總結回顧
本篇主要介紹了平面幾何中,使用 manim繪制各種基本圖形的方法,
- 只要提供點坐標就能繪制的圖形有:點,線(直線,虛線,箭頭線),還有任意多邊形,
- 需要提供角度或者半徑資訊的圖形有:圓,橢圓,圓弧,圓角矩形
- 提供邊長資訊的圖形有:正方形,矩形
- 最后,還有一個特殊的專門用來繪制正多邊形的物件
本文關聯的微信視頻號短視頻:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548575.html
標籤:Python
上一篇:經典動態規劃題(python)
