旋转形状时,顶点略微偏离
When rotating shapes, vertices are just slightly off
我正在处理来自此视频的 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()
代码实际上并没有错,只是这些三角形的绘制方式。三角形周围的边框具有导致伪影的宽度。如果您删除边框或将边框视为三角形的范围,问题就会消失。
问题是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
我正在处理来自此视频的 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()
代码实际上并没有错,只是这些三角形的绘制方式。三角形周围的边框具有导致伪影的宽度。如果您删除边框或将边框视为三角形的范围,问题就会消失。
问题是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