1. 벡터와 행렬의 관계

1) 점 P(3, 2)와 행렬A([2, 0],

                            [1, 2])를 곱하면 새로운 행렬 B가 나옴 

① import numpy as np ← numpy 모듈을 np로 불러오겠음

 

② p = np.matrix([[3], [2]]) ← 2 x 1의 행렬이므로 점 P를 행렬(matrix)로 표시 

    A = np. matrix)[[2, 0], [1, 2]]) ← 행렬 A 입력

 

③ A * P ← 행렬의 곱 

 

④ matrix([[6], [7]]) ← 새로운 행렬 B 나옴. 즉, 벡터의 끝 점이 바뀐 것 

 

 

 

2. 도형의 대칭이동 

1) x축에 대해 선대칭으로 변환

  - x축에 대해 선 대칭은 x값의 부호는 그대로, y값의 부호는 반대가 됨 

  - 따라서 변환 행렬(단위 행렬)을 가지고 오고, y값이 부호가 반대이므로 A = ([1, 0],

                                                                                                     [0, -1])을 곱해야 함 

 

 

① %matplotlib inline 

    import numpy as np ← numpy 모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러오겠음

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1]])  ← <A → B → C → A> 순서로 그림을 그렸으므로 이 순서로 좌표 입력

    A = np.matrix([[1, 0], [0, -1]]) ← x축 대칭인 변환행렬 

 

③ p2 = A * p ← 변환한 행렬 

    print(p2) ← x축에 대해 대칭으로 변환된 행렬 p2를 보여라 

 

④ p= np. array(p) 

    p2 = np.array(p2) ← p와 p2를 이차원 행렬로 배열하라

                                (원래 2 x 4 였음 따라서 우린 x와 y만 있는 2차원에 이것을 그릴것)

   

⑤ plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫 번째 행과 두 번째 행을 그려라

                                     (즉 x좌표와 y좌표, 코딩에서 숫자는 항상 0부터 시작)

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫 번째 행과 두 번째 행을 그려라  

    plt.axis('equal') ← x와 y축을 동등한 크기로 맞춰라 

    plt.grid(color='0.8') ← 간격을 0.8의 굵기로 그려라 

    plt.show( ) ← 보여줘라 

     

 

 

 

2) y축에 대해 선대칭

  - y축에 대해 선 대칭은 y값의 부호는 그대로, x값의 부호는 반대가 됨 

  - 따라서 변환 행렬(단위 행렬)을 가지고 오고, x값이 부호가 반대이므로 A = ([-1, 0],

                                                                                                     [0, 1])을 곱해야 함 

① (import numpy as np) ← numpy 모듈을 np로 불러오겠음

 

② p = np.matrix([[1, 3, 3], [1, 1, 2]]) ← 삼각형 ABC의 좌표 넣어 행렬 입력

    A = np. matrix)[[-1, 0], [0, 1]]) ← y축에 선대칭인 변환행렬 입력

 

③ A * P ← 선대칭한 행렬 

 

④ matrix([[-1, -3, -3], [1, 1, 2]])

 

 

 

3) 원점에 대해 선대칭

① (import numpy as np) ← numpy모듈을 np로 불러오겠음

 

② p = np.matrix([[1, 3, 3], [1, 1, 2]]) ← 삼각형 ABC의 좌표를 입력한 행렬 입력

    A = np. matrix)[[-1, 0], [0, -1]]) ← 원점이므로 모든 부호가 바뀐 변환행렬 입력

 

③ A * P ← 원점에 대해 선대칭된 행렬을 구해라 

 

④ matrix([[-1, -3, -3], [-1, -1, -2]])

 

 

 

4) 직선 y = x에 대해 선대칭

① (import numpy as np) ← numpy 모듈을 np로 불러와라

 

② p = np.matrix([[1, 3, 3], [-1, -1, 0]]) ← 삼각형 ABC의 좌표를 입력한 행렬을 입력해라 

    A = np. matrix)[[0, 1], [1, 0]]) ← y=x에 대한 선대칭으므로 둘의 위치가 바뀐 변환 행렬을 입력하라 

 

③ A * P ← y = x에 대해 선대칭된 행렬을 구하라 

 

④ matrix([[-1, -1, 0], [1, 3, 3]])

 

 

 

3.  도형을 확대하고 축소하기 

① %matplotlib inline 

    import numpy as np ← numpy 모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러오겠음

 

② p = np.matrix([[1, 1, 2, 1], [3, 1, 1, 3]]) ← 삼각형 ABC (그리는 순서대로 좌표 입력) 좌표를 입력한 행렬 입력

    A = np.matrix([[3, 0], [0, 3]]) ← 3배를 확대시키고 싶은 것이므로 변환행렬에 실수배 3을 곱하면 됨. 

 

③ p2 = A * p ← 3배 확대된 행렬 구해라

    print(p2) ← 3배 확대된 행렬을 보여줘라 

 

④ p= np. array(p) ← p의 배열을 이차원으로 나타내라 

    p2 = np.array(p2) ← p2의 배열을 이차원으로 나타내라 

 

⑤ plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫 번째 행과 두 번째 행을 그려라 (x좌표, y좌표)

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫 번째 행과 두 번째 행을 그려라 

    plt.axis('equal') ← x와 y의 크기는 균일하게 맞춰라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자무늬를 그려라 

    plt.show( ) ← 보여줘라 

 

 

 

4. 도형을 회전시키기 

1) 회전 행렬을 만드는 방법

① %matplotlib inline

    import numpy as np ← numpy모듈을 np로 불러와라

    import matplotlib.pyplot as plt ← pyplot을 plt로 가져와라 

 

② p = np.matrix([[3, 3, 5, 5, 3], [3, 1, 1, 3, 3]]) ← 사각형 ABCD의 좌표를 행렬로 입력해라 

 

③ th = np.radians(45) ← 반 시계방향으로 45도 회전해라 (도수법을 호도법으로 전환) 

    A = np.matrix([[np.cos(th), np.sin(-th)], [np.sin(th), np.cos(th)]]) ← 위의 회전행렬을 입력

 

④ p2 = A * p ← 반 시계방향으로 45도 회전한 행렬 구하기

    print(p2) ← 반 시계방향으로 45도 회전한 행렬을 나타내라 

 

⑤ p = np.array(p) ← p를 이차원 배열로 나타내라 

    p2 = np.array(p2) ← p2를 이차원 배열로 나타내라

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라 

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축을 균일하게 맞춰라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자 무늬를 넣어라 

    plt.show( ) ← 보여줘라 

 

 

5. 2 X 2 행렬이 아닌 3 X 3 행렬 사용하기

1) 대칭 이동이나 확대 및 축소할 땐 변환 행렬을 2x2 행렬을 사용했지만 평행 이동시 3x3의 행렬을 이용해야 함

   (평행 이동은 덧셈이기 때문)

 

2) 그렇기 때문에 동차 좌표 방식을 도입

  - 일반적인  이차원 좌표 (x, y)에 매개변수 w 도입하여 (wx, wy, w)라고 표현 

  - 매개변수 w 값은 항상 1이므로 x와 y값은 변화하지 않음 

 

 

3) 삼각형 ABC를 x축 방향으로 2만큼 평행이동, y축 방향으로 3만큼 평행이동 하는 방법 

  - 동차좌표로 표현하면 → ([1, 0, 2], 

                                    [0, 1, 3],

                                    [0, 0, 1]) 

① %matplotlib inline 

    import numpy as np → numpy모듈을 np로 불러오겠음

    import matplotlib.pyplot as plt → pyplot을 plt로 불러오겠음 

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1], [1, 1, 1, 1]]) ← 삼각형 ABC (그리는 순서대로) 행렬 입력

    A = np.matrix([[1, 0, 2], [0, 1, 3], [0, 0, 1]]) ← 동차좌표를 이용해 평행이동을 하는 변환 행렬 입력

 

③ p2 = A * p ← 변환된 행렬 구하기 

    print(p2) ← 변환된 행렬 나타내라 

 

④ p = np.array(p) ← 행렬 p를 이차원 배열로 나타내라

    p2 = np.array(p2) ← 행렬 p2를 이차원 배열로 나타내라 

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축의 크기를 균일하게 맞추어라 

    plt.grid(color='0.8') ← 격자무늬를 0.8의 굵기로 그려라 

    plt.show( ) ←보여줘라 

 

 

 

6. 일차변환의 조합 

 

1) 삼각형 ABC를 x축 방향으로 2만큼, y축 방향으로 3만큼 평행이동한 후에 반 시계 방향으로 90도 회전시키기 

① %matplotlib inline

    import numpy as np ← numpy 모듈을 np로 불러와라

    import matplotlib.pyplot as plt ← pyplot을 plt로 불러와라 

 

② p = np.matrix([[1, 3, 3, 1], [1, 1, 2, 1], [1, 1, 1, 1]]) ← 삼각형ABC의 좌표를 행렬로 입력하라 

 

A = np.matrix([[1, 0, 2], [0, 1, 3], [0, 0, 1]]) ← 동차좌표에서 평행이동하여 행렬을 입력해라 

    th = np.radians(90) ← 도수법을 호도법으로 전환함 

    A = np.matrix([[np.cos(th), np.sin(-th), 0], [np.sin(th), np.cos(th), 0], [0, 0, 1]]) A

         ← 동차좌표가 원래 ([1, 0, 0], [0, 1, 0], [0, 0, 1]) 이었으므로 동차좌표를 이용해 회전 행렬 입력 

 

④ p2 = B * A * p ← 평행이동하고, 회전까지 한 행렬 구하기 

    print(p2) ← 평행이동하고 회전한 행렬을 나타내라 

 

⑤ p = np.array(p) ← 행렬 p를 이차원 배열로 나타내라 

    p2 = np.array(p2) ← 행렬 p2를 이차원 배열로 나타내라 

    plt.plot(p[0, :], [p[1, :]) ← 배열 p의 첫번째, 두번째 행을 그려라 

    plt.plot(p2[0, :], p2[1, :]) ← 배열 p2의 첫번째, 두번째 행을 그려라 

    plt.axis('equal') ← x축과 y축의 크기를 균일하게 해라 

    plt.grid(color='0.8') ← 0.8의 굵기로 격자무늬를 그려라 

    plt.show( ) ← 보여줘라 

 

+ Recent posts