728x90
반응형
지난 글에서는 Manim을 이용하여 원을 그려보고, 움직이게도 해봤습니다.
2022.09.14 - [파이썬/MANIM] - Manim. 원 그리기
이번 글에서는 정사각형(Square)에 대해서 알아보겠습니다.
Square 클래스
Square 클래스에서 많이 쓰이는 파라미터는 한 변의 길이(side_length)입니다.
- side_length : 정사각형의 한 변의 길이
Square Example
예제를 들어볼까요?
1. 정사각형 탑 쌓기
from manim import *
class SquareExample(Scene):
def construct(self):
square_1 = Square(side_length=2.0).shift(DOWN)
square_2 = Square(side_length=1.0).next_to(square_1, direction=UP)
square_3 = Square(side_length=0.5).next_to(square_2, direction=UP)
self.add(square_1, square_2, square_3)
간략히 살펴볼까요?
square_1 = Square(side_length=2.0).shift(DOWN)
# 한변의 길이가 2인 정사각형 원점에서 아래 방향으로 unit 단위만큼 위치
○ shift()는 지난 글을 참고하면 됩니다.
○ next_to() 는 직관적으로 생각했을 때, 옆에 위치시키는 것을 말하는데, 정확한 정의는 아래와 같습니다.
next_to(mobject_or_point, direction=array([1., 0., 0.]), buff=0.25, aligned_edge=array([0., 0., 0.]), submobject_to_align=None, index_of_submobject_to_align=None, coor_mask=array([1, 1, 1])) ▷ mobject_or_point : 기준이 되는 도형(object)를 의미 ▷ direction : 옆에 위치시킬 방향을 의미 (UP, DOWN, LEFT, RIGHT 등) ▷ buff : 위치시킬 때 떨어진 간격을 의미 |
square_2 = Square(side_length=1.0).next_to(square_1, direction=UP)
# 한변의 길이가 1인 정사각형을 square1의 up방향으로 위치시키고 이를 square_2라 정의
square_3 = Square(side_length=0.5).next_to(square_2, direction=UP)
# 한변의 길이가 0.5인 정사각형을 square2의 up방향으로 위치시키고 이를 square_3라 정의
결과를 보겠습니다.
해당 예제는 Manim의 square 관련 문서에서 차용했습니다.
2. 가만히 있는 정사각형과 움직이는 4개의 원
1번 예제에서 next_to를 소개했으니 이를 응용한 애니메이션 하나 만들어 보겠습니다.
해당 예제는 이 사이트의 예제를 참고, 응용했습니다.
class NextTo(Scene):
def construct(self):
c1, c2, c3, c4 = [Circle(radius=0.3 * (i + 1), color=WHITE)
for i in range(4)]
square = Square(side_length=5)
# use Python's * syntax to write the objects
# does the following: f(*[1, 2, 3]) == f(1, 2, 3)
self.play(*[Write(o) for o in [c1, c2, c3, c4, square]])
# move the circles such that they surround the rectangle
self.play(
c1.animate.next_to(square, LEFT),
c2.animate.next_to(square, UP),
c3.animate.next_to(square, RIGHT),
c4.animate.next_to(square, DOWN),
)
manim import는 이제 생략하겠습니다. 간략히 살펴보죠.
c1, c2, c3, c4 = [Circle(radius=0.3 * (i + 1), color=WHITE)
for i in range(4)]
# 원 4개를 for문으로 생성. 반지름이 0.3, 0.6, 0.9, 1.2인 하얀색 원임.
# use Python's * syntax to write the objects
# does the following: f(*[1, 2, 3]) == f(1, 2, 3)
self.play(*[Write(o) for o in [c1, c2, c3, c4, square]])
# 원 4개와 square를 for문을 이용하여 등장시킴(write)
○ python의 * 문법이 등장합니다. Asterisk Syntax인데요. 위의 영어 주석처럼 리스트나 튜플 속 원소들을 함수의 인자로 변환하여(unpacking) 함수에 넣을 때 쓰입니다.
# move the circles such that they surround the rectangle
self.play(
c1.animate.next_to(square, LEFT), # c1은 정사각형의 왼쪽에 등장
c2.animate.next_to(square, UP), # c2은 정사각형의 위에 등장
c3.animate.next_to(square, RIGHT), # c3은 정사각형의 오른쪽에 등장
c4.animate.next_to(square, DOWN), # c4은 정사각형의 아래에 등장
)
한번 결과를 보겠습니다.
원과 정사각형이 등장했다가, 정사각형의 좌, 우, 위, 아래로 이동하는 모습이 보입니다. Psy의 노래가 생각나네요.
728x90
반응형
'파이썬 > MANIM' 카테고리의 다른 글
Manim. 도형 회전 rotate의 비밀 (0) | 2022.09.22 |
---|---|
Manim. 삼각형 그리기 (0) | 2022.09.21 |
Manim. 원 그리기 (0) | 2022.09.14 |
Manim. 가장 쉬운 예제를 알아보자. (0) | 2022.09.13 |
MANIM이란? 어떻게 설치하지? (1) | 2022.09.13 |
댓글