带内弧的颜色 MObject
Color MObject with inner arc
我正在使用 manim 社区,我在其中使用 Line 和 ArcBetweenPoints 创建了一个 MObject。
当我尝试填充 MObject 时,对象在较大圆弧的起点和终点之间着色。有没有办法正确地给这个 MObject 上色?
请查看下面的代码以直观地了解问题。通过取消注释带有 'set_fill' 的行,您会看到对象是如何被错误填充的。
%%manim -qm -v WARNING MobjectExample
g1 = [-1.5, 0, 0]
g2 = [0, -1.5, 0]
g3 = [1.5, 0, 0]
g7 = [0.5, 0, 0]
g8 = [0, -0.5, 0]
g9 = [-0.5, 0, 0]
class MobjectExample(Scene):
def construct(self):
g = ArcBetweenPoints(start=g1, end=g2, stroke_color=BLUE) \
.append_points(ArcBetweenPoints(start=g2, end=g3).points) \
.append_points(ArcBetweenPoints(start=g8, end=g7).points) \
.append_points(ArcBetweenPoints(start=g9, end=g8).points)\
.append_points(Line(g1, g9).points)\
.append_points(Line(g3, g7).points)
# Please uncomment the next line to color the object
# g.set_fill(BLUE, opacity=1)
self.play(Create(g))
self.wait(2)
您使用 append_points
的方式对 mobject 有一种奇怪的影响,因为不是绘制了一条连续的路径,而是绘制了多条形成某种组的路径。您可以改用 append_vectorized_mobject
来解决此问题,它负责将不同的路径正确合并在一起。并且:当你像这样连接mobject点时,你必须确保这些点实际上描述了一条连续的路径; n-th 子路径的终点必须是第 (n+1) 个子路径的起点。
试试这个:
class MobjectExample(Scene):
def construct(self):
g = ArcBetweenPoints(start=g1, end=g2, stroke_color=BLUE)
g.append_vectorized_mobject(ArcBetweenPoints(start=g2, end=g3))
g.append_vectorized_mobject(Line(g3, g7))
g.append_vectorized_mobject(ArcBetweenPoints(start=g7, end=g8, angle=-TAU/4))
g.append_vectorized_mobject(ArcBetweenPoints(start=g8, end=g9, angle=-TAU/4))
g.append_vectorized_mobject(Line(g9, g1))
g.set_fill(BLUE, opacity=1)
self.play(Create(g))
self.wait(2)
我正在使用 manim 社区,我在其中使用 Line 和 ArcBetweenPoints 创建了一个 MObject。 当我尝试填充 MObject 时,对象在较大圆弧的起点和终点之间着色。有没有办法正确地给这个 MObject 上色?
请查看下面的代码以直观地了解问题。通过取消注释带有 'set_fill' 的行,您会看到对象是如何被错误填充的。
%%manim -qm -v WARNING MobjectExample
g1 = [-1.5, 0, 0]
g2 = [0, -1.5, 0]
g3 = [1.5, 0, 0]
g7 = [0.5, 0, 0]
g8 = [0, -0.5, 0]
g9 = [-0.5, 0, 0]
class MobjectExample(Scene):
def construct(self):
g = ArcBetweenPoints(start=g1, end=g2, stroke_color=BLUE) \
.append_points(ArcBetweenPoints(start=g2, end=g3).points) \
.append_points(ArcBetweenPoints(start=g8, end=g7).points) \
.append_points(ArcBetweenPoints(start=g9, end=g8).points)\
.append_points(Line(g1, g9).points)\
.append_points(Line(g3, g7).points)
# Please uncomment the next line to color the object
# g.set_fill(BLUE, opacity=1)
self.play(Create(g))
self.wait(2)
您使用 append_points
的方式对 mobject 有一种奇怪的影响,因为不是绘制了一条连续的路径,而是绘制了多条形成某种组的路径。您可以改用 append_vectorized_mobject
来解决此问题,它负责将不同的路径正确合并在一起。并且:当你像这样连接mobject点时,你必须确保这些点实际上描述了一条连续的路径; n-th 子路径的终点必须是第 (n+1) 个子路径的起点。
试试这个:
class MobjectExample(Scene):
def construct(self):
g = ArcBetweenPoints(start=g1, end=g2, stroke_color=BLUE)
g.append_vectorized_mobject(ArcBetweenPoints(start=g2, end=g3))
g.append_vectorized_mobject(Line(g3, g7))
g.append_vectorized_mobject(ArcBetweenPoints(start=g7, end=g8, angle=-TAU/4))
g.append_vectorized_mobject(ArcBetweenPoints(start=g8, end=g9, angle=-TAU/4))
g.append_vectorized_mobject(Line(g9, g1))
g.set_fill(BLUE, opacity=1)
self.play(Create(g))
self.wait(2)