0

我正在处理这个视频中的一个 manim 挑战:https ://youtu.be/HKPm8FZYaqI?t=700 。挑战是编写从 11:40 开始到 11:49 结束的动画。

我走到了三角形被旋转并复制到第二个正方形的位置,但由于某种原因,它们只是我必须旋转的那些稍微偏离了一点,而我不必旋转的那些似乎很完美。

看看这张图片:在此处输入图像描述

三角形完全适合右侧的正方形。但在右边的正方形中,旋转的那些(1 和 4)没有。下面是我对三角形 1 的意思的特写:在此处输入图像描述

当然,这就是我想要的样子:在此处输入图像描述 形状的尺寸和颜色可能有点不同,但那是因为这是视频作者的解决方案,而之前是我的尝试。我不在乎,我只关心为什么三角形不能像这里那样完美地适合我的尝试。放大这张图片,我们看到三角形确实非常适合:在此处输入图像描述

任何有关为什么会发生这种情况的见解将不胜感激!

我的动画的源代码是这样的:

class Pythagoras(Scene):
    def construct(self):
        title = TextMobject("Pythagorean Theorem")
        title.to_edge(UL)

        pre_square = Polygon(
            [-2, 2, 0],
            [2, 2, 0],
            [2, -2, 0],
            [-2, -2, 0],
            color=WHITE
        )

        self.wait()


        square2 = Polygon(
            [-1.41, 1.41, 0],
            [1.41, 1.41, 0],
            [1.41, -1.41, 0],
            [-1.41, -1.41, 0]

        )
        square2.rotate(PI/6)

        triangle1 = Polygon(
            [-2, 2, 0],
            [-2 + math.sqrt(6), 2, 0],
            [-2, 2 - math.sqrt(2), 0],
            color=YELLOW
        )

        triangle2 = Polygon(
            [2, 2, 0],
            [-2 + math.sqrt(6), 2, 0],
            [2, 2 - math.sqrt(6), 0],
            color=YELLOW
        )

        triangle3 = Polygon(
            [2, 2 - math.sqrt(6), 0],
            [2, -2, 0],
            [2 - math.sqrt(6), -2, 0],
            color=YELLOW
        )

        triangle4 = Polygon(
            [-2, 2 - math.sqrt(2), 0],
            [-2, -2, 0],
            [2 - math.sqrt(6), -2, 0],
            color=YELLOW
        )

        triangles = [triangle1, triangle2, triangle3, triangle4]
        for triangle in triangles:
            triangle.set_fill(YELLOW, 0.6)

        self.play(Write(title), ShowCreation(pre_square), ShowCreation(triangle1), ShowCreation(triangle2), ShowCreation(triangle3), ShowCreation(triangle4))

        self.wait()

        group = VGroup(pre_square, triangle1, triangle2, triangle3, triangle4)

        self.play(ApplyMethod(group.to_edge, LEFT, {"buff": 1.6}))
        self.wait()

        square3 = pre_square.copy()

        self.play(ApplyMethod(square3.shift, RIGHT * 7))

        triangle2.generate_target()
        triangle2.target.shift(RIGHT * (7- math.sqrt(6)))

        triangle1.generate_target()
        triangle1.target = triangle2.target.copy().rotate(PI) 

        triangle3.generate_target()
        triangle3.target.shift(RIGHT * 7)

        triangle4.generate_target()
        triangle4.target = triangle3.target.copy().rotate(PI)


        self.play(MoveToTarget(triangle1.copy()), MoveToTarget(triangle2.copy()), MoveToTarget(triangle3.copy()), MoveToTarget(triangle4.copy()))

        self.wait()
4

2 回答 2

1

代码实际上并没有错,只是这些三角形是如何绘制的。三角形周围的边框具有导致伪影的宽度。如果您删除边框或将边框视为三角形的范围,问题就会消失。

于 2019-08-12T19:36:02.437 回答
1

问题是 VMobjects 的厚度,默认情况下为 4,如果将其更改为 2 或 1(在我给出的解决方案中为 1),这些角将被移除。将此添加到您的for

        for triangle in triangles:
            triangle.set_fill(YELLOW, 0.6)
            triangle.set_stroke(None,1.5)
            #or
            #triangle.set_stroke(width=1.5)
            #it is the same
于 2019-08-12T21:22:26.910 回答