[영상 Geometry #5] 3D 변환

영상처리 2013.07.15 10:12

(3D 비전 geometry 4번째 파트 3D 변환입니다)



4. 3D 변환 (3D Transformations)


컴퓨터 비전에서 관심있는 3D 변환은 회전과 평행이동 뿐입니다 (즉, rigid 변환). 하늘에 떠 있는 비행기가 갑자기 커지거나 로보트로 변신하는 것 등은 관심사항이 아닙니다.



4.1 변환 행렬


3차원 공간의 점 (X, Y, Z)를 X축, Y축, Z축을 중심으로 θ 라디안(radian) 회전시키는 행렬을 각각 Rx(θ), Ry(θ), Rz(θ)라 하면 이들은 다음과 같다.


 --- (1)


 --- (2)


 --- (3)


이 때, 회전방향은 아래 그림과 같이 각 축에 대해 반시계 방향이다 (오른손 주먹을 말아쥐고 엄지를 들었을 때 엄지 방향이 회전축 방향, 말아쥔 손가락 방향이 회전방향).



이제 위 3개의 기본 회전변환을 조합하면 임의의 3D 회전을 표현할 수 있다.


 --- (4)


좌표축이 아닌 임의의 단위벡터 u = (ux, uy, uz)을 회전축으로 한 회전변환 행렬은 다음과 같다 (단, ux2 + uy2 + uz2 = 1) (출처: 위키피디아)


--- (5)


회전변환 R, 평행이동 t = [tx, ty, tz]T를 이용한 일반적인 3D 변환식(rigid 변환)은 다음과 같다.


 --- (6)


2D 변환과 마찬가지로, 3D 변환에서도 homogeneous 좌표를 사용하면 다음과 같이 회전변환과 평행이동을 하나의 변환행렬로 즉, 선형변환 형태로 표현할 수 있다.


 --- (7)


참고로, 위키피디아에 보면 어떤 행렬 R이 회전변환이 되기 위한 필요충분 조건은 RT = R-1, det(R) = 1 이라 한다.


4.2 변환관계 구하기


예를 들어 3D 공간에서 비행기 한대가 마음대로 이동한다고 했을 때, 비행기 동선의 임의의 두 지점 사이의 변환관계를 구하는 것이 목적입니다. 물론 이 변환관계는 회전변환과 평행이동만으로 표현이 가능합니다. 먼저 두 벡터 사이의 회전변환을 구하는 문제부터 시작해서 평행이동을 포함한 변환까지 구해보도록 하겠습니다.


4.2.1 회전변환 구하기


크기가 같은 임의의 두 벡터 u = [x, y, z]T, u' = [x', y', z']T가 있을 때, uu'로 이동시키는 회전변환은 다음과 같이 구할 수 있습니다.


 --- (8)


--- (9)


 --- (10)


 --- (11)


θ는 두 벡터 u, u' 사이의 사잇각이며 벡터의 내적을 이용하면 손쉽게 구할 수 있습니다. 회전축이 문제인데, 회전축은 두 벡터 u, u'에 의해 결정되는 평면에 수직인 벡터 즉, 벡터의 외적을 이용하면 됩니다. 이렇게 구한 회전각 θ와 회전축 단위벡터 v를 앞서 식 (5)에 대입하면 원하는 회전변환 행렬을 구할 수 있습니다.


☞ 벡터의 개념 및 백터의 내적, 외적은 알아두면 여러모로 유용합니다. 참고로, 벡터의 외적은 http://blog.naver.com/mindo1103/90103361104 글을 참조하면 잘 설명되어 있습니다. 앞 글에서도 설명했지만 벡터의 외적 u1 × u2 란 두 벡터 u1, u2에 의해 결정되는 평면에 수직이면서(오른손 방향) 그 크기가 u1, u2를 두 변으로 하는 평행사변형의 면적과 같은 벡터를 말합니다


4.2.2 Rigid 변환 구하기


이제 회전뿐만 아니라 평행이동까지 포함한 문제로 확대해 보겠습니다.


3차원 공간에서 어떤 물체의 위치 및 방향을 유일하게 결정하기 위해서는 최소 몇 개의 점이 필요할까요?


물체 위의 3개의 점만 있으면 됩니다. 또한 마찬가지로 3차원 공간에서 움직이는 물체의 위치관계를 표현하기 위해서는 3개의 매칭쌍만 있으면 됩니다.


즉, 3D에서 rigid 변환을 결정하기 위해 필요한 매칭쌍의 개수는 3개입니다.


위 비행기 그림을 예로 들어 rigid 변환을 구하는 과정을 설명하겠습니다.


위치 A에서의 비행기 상의 임의의 점을 (x, y, z), 위치 A'에서의 대응되는 점을 (x', y', z')라 할 때, 주어진 3개의 매칭쌍 p1-p1', p2-p2', p3-p3'를 이용하여 (x, y, z)에서 (x', y', z')로의 rigid 변환관계를 구하는 것이 목적입니다 (pi = (xi,yi,zi), pj'=(xj',yj',zj')).


과정을 간략히 말로 설명하면 1) p1이 원점이 되도록 A를 평행이동 시킨 후, 2) A'의 방향과 일치되도록 회전시켜서, 3) p1'까지 평행이동시킨다 입니다.


결국 관건은 회전변환인데, 두 물체를 일치시키기 위해서는 총 2번의 회전이 필요합니다. 먼저 벡터 p1p2가 벡터 p1'p2'가 되도록 회전시킨 후 (R1), p3와 p3'이 일치되도록 한번 더 회전을 시킵니다 (R2).


 --- (12)


R1은 4.2.1 회전변환 구하기 방법을 사용하면 구할 수 있습니다.


그런데 문제는 R2를 구하는 것인데, 이걸 구하는 게 쉽지가 않네요.. 이리 저리 궁리를 해 봤지만 간결한 방법은 발견하지 못했습니다. 제가 푼 방법을 간략히 설명하면 다음과 같습니다.


먼저 R1까지 적용하면 벡터 R1*p1p2와 벡터 p1'p2'가 일치됩니다. 다음으로 벡터 R1*p1p3를 회전시켜서 p1'p3'이 되도록 만들어야 합니다. 회전축은 R1*p1p2인데 회전각이 문제입니다. 벡터 R1*p1p3와 벡터 p1'p3' 사잇각을 구하는 것은 바람직하지 않습니다. 두 벡터를 R1*p1p2에 수직인 평면에 projection 시킨 후 사잇각을 구해야 합니다. projection을 직접 구하는 것은 어렵기 때문에 R1*p1p2 & R1*p1p3에 의해 결정되는 평면에 수직인 벡터(법선벡터)와 R1*p1p2 & p1'p3'에 의해 결정되는 평면에 수직인 법선벡터를 구해서 두 법선벡터가 일치되도록 회전을 시키면 됩니다. 즉, R2는 (R1*p1p2)×(R1*p1p3)를 (R1*p1p2)×p1'p3'로 회전시키는 행렬입니다.


☞ 이상으로 3D 공간에서 물체의 임의의 변환관계를 3개의 매칭쌍을 이용하여 계산하는 방법을 살펴보았습니다. 그런데 여기서 설명한 방법은 나름 구해본 방법이기 때문에 더 좋은 방법이 있을 거라 생각합니다 (지금은 모르지만). 특히 여기서 설명한 방법은 매칭쌍이 3개인 경우에만 적용가능하며 매칭쌍이 3개 이상인 경우까지는 확장이 안됩니다. 즉, 다수의 (3개 이상) 매칭쌍에 대해 이들을 가장 잘 근사하는 변환을 구할 때에는 다른 방법이 필요할 것입니다.



4.3 좌표축 변환


마지막으로 3D 공간에서 좌표축 변환 행렬을 살펴보고 글을 마무리하겠습니다.


[영상처리] - [컴퓨터 비전에서의 Geometry #1] 좌표계 에서 설명했던 월드 좌표계와 카메라 좌표계 사이의 변환이 좌표축 변환에 해당합니다.


월드좌표계 상에서 카메라 초점(카메라 좌표계의 원점)의 좌표를 (Fx, Fy, Fz), 월드좌표계의 좌표축을 카메라 좌표계 좌표축으로 회전시키는 행렬을 R이라 하겠습니다.


이 때, 월드 좌표계의 점 (X, Y, Z)을 카메라 좌표계로 봤을 때의 좌표 (Xc, Yc, Zc)는 다음과 같이 구해집니다.


 --- (13)


회전변환 행렬의 경우 RTR = I 즉, R-1 = RT가 성립하므로 위 식은 아래와 같이 쓸 수 있습니다.


 --- (14)


카메라 좌표계 상의 점을 월드 좌표계로 바꿀 때에도 위 식을 역으로 이용하면 됩니다.


실제로 R을 구하는 방법에 대해서는 [영상처리] - 3D 좌표계 변환 방법 (예: 월드좌표계 - 카메라 좌표계) 글을 참조하기 바랍니다.



by 다크 프로그래머


저작자 표시 비영리 변경 금지
신고
  • BlogIcon 바다야크 2013.07.15 11:27 신고 ADDR 수정/삭제 답글

    그래픽은 화려하지만, 그만큼 처리하는 기술은 복잡하군요.
    오랜만에 행렬을 봅니다. ^^

    • BlogIcon 다크pgmr 2013.07.15 14:46 신고 수정/삭제

      그래픽스 쪽은 잘 모르지만 아마도 상당히 복잡하겠지요.. 더운데 건강 조심하시고 좋은 하루 되세요.

  • 펄그라스 2013.07.18 22:15 신고 ADDR 수정/삭제 답글

    안녕하세요. 항상 주옥같은 글 감사드립니다.
    호모그래피 행렬 추출관련하여 글로쓰기에는 의사전달에 무리가 있어 염치불구하고 이멜로 문의 드렸습니다. ^^;
    감사합니다.

  • 데이 2014.02.11 05:29 신고 ADDR 수정/삭제 답글

    rigid 변환에서 좌표 쌍을 2번에 나누어 회전시키는 이유가 무엇인가요?

    단지 행렬 R1, R2식으로 나누어져 있어서 그런지요?

    • BlogIcon 다크pgmr 2014.02.11 13:59 신고 수정/삭제

      회전변환은 하나의 중심축에 대한 회전을 표현하는 행렬입니다. 위 4.2.2의 그림에서 보면 어떻게 회전 중심축을 잡아도 한번의 회전으로 A에서 A'로 이동하는 것은 불가능합니다. 최소 2번의 회전이 있어야만 임의의 두 방향을 서로 일치시킬 수 있기 때문입니다.

    • BlogIcon 다크pgmr 2014.04.22 20:15 신고 수정/삭제

      최근에 Rodrigues에 관한 내용을 보다가 문득 앞의 2월 11일자 답변 내용이 잘못되었다는 생각이 들었습니다. 즉, 3D에서 임의의 두 좌표축 관계를 항상 한번의 회전변환만으로 일치시킬 수 있는 것 같습니다. 따라서 답변을 아래와 같이 수정하겠습니다.
      => 본문에 설명한 방법은 나름 식을 세워서 구해 본 것이기 때문에 여러 가능한 방법중 하나일 뿐이며 다른 좀더 효율적인 방법이 있을수도 있음.

  • simon023 2014.11.22 07:27 신고 ADDR 수정/삭제 답글

    안녕하세요,
    Rigid 변환의 적용 방법에 대한 질문이 있어 문의드립니다.
    공간상의 임의의 한 점을 좌표축 A의 관점에서 보았을때 좌표값이 P1(p1x, p1y, p1z) 라고 하고, 이 점을 좌표축 B의 관점에서 P1'(p1x', p2y', p2z') 이라고 한다면
    좌표축 A 로 부터 좌표축 B로의 변환을 위한 좌표축변환 매트릭스를 구하고자 할 때,
    Rigid 변환을 적용할 수 있는지 문의드립니다.
    일반적인 좌표축 변환의 역변환이라고 할 수 있는데 조언 부탁드립니다.
    감사합니다.

    • BlogIcon 다크pgmr 2014.11.24 09:41 신고 수정/삭제

      안녕하세요. 말씀하신 좌표축 변화는 회전, 평행이동만으로 구성된다면 rigid 변환으로 볼 수 있습니다. 주어진 매칭쌍들로부터 변환행렬을 구하는 것은 행렬의 원소들을 미지수로 놓고 연립방정식을 직접 푸는 방법이 있겠습니다. 또는 단위벡터 (1,0,0), (0,0,1), (0,1,0)가 이 변환에 의해 어디로 이동하는지를 이용해서 행렬을 곧바로 구하는 방법 등이 있으니 참고하시기 바랍니다.

    • BlogIcon 다크pgmr 2014.11.30 22:12 신고 수정/삭제

      추가내용입니다. 연립방정식을 푸는 것은 주어진 좌표쌍이 4개 이상일 때 적합하고, 만일 좌표쌍이 3개만 주어질 경우에는 본문 내용처럼 기하학적인 해석을 통해 변환행렬을 구하는 것이 좋겠습니다.

  • supra85 2015.01.22 13:42 신고 ADDR 수정/삭제 답글

    먼저 작성해주시는 모든 글들 정말 유용하게 잘 보고 있습니다. 정말 감사합니다.
    그럼 질문하나 드리겠습니다.
    스테레오 카메라의 경우 각 카메라 사이의 변환 행렬 (회전, 이동)을 구하기 위해 체스판등을 이용한
    Calibration을 수행하는 것으로 알고 있습니다. (맞죠?)
    그렇다면 이 글에서 회전 변환을 구하기 위해 u,u' 벡터를 사용하였는데요. Calibration으로 이 u, u'벡터를 얻는 것인가요?

    • BlogIcon 다크pgmr 2015.01.22 16:04 신고 수정/삭제

      안녕하세요. 포인트가 조금 다른데요.. 윗 글은 카메라는 고정되어 있고 그 안에서 물체가 움직일 때 물체의 움직임을 해석하는 것에 대한 글입니다. 그리고 말씀하신 내용은 카메라가 변할 때 카메라 간의 위치관계를 구하는 것이라 내용이 다른 것 같습니다. 카메라 영상 간의 변환관계는 보통 essential matrix를 먼저 구한후 이를 분해해서 회전변환 성분을 추출하는 방법이 사용됩니다.

  • supra85 2015.01.22 18:55 신고 ADDR 수정/삭제 답글

    아 그렇군요. 감사합니다.ㅎ

  • 아스리 2015.09.16 17:18 신고 ADDR 수정/삭제 답글

    정말 유익한글 잘 보았습니다. 감사드립니다.
    한가지 궁금한 것이 생겨서 여쭈어 봅니다...
    위의 글에서 u -> u' 로 회전각(θ)은 u 와 u' 의 내적으로 구하고, 회전 축은 u 와 u'의 외적으로 구한다고 합니다. 이것을 위의 글의 (5)번 식에 대입하여 회전 변환 행렬을 구한 뒤, 다른 a 벡터에 회전 행렬을 곱해 a' 를 만들었을 때, u -> u' 로 회전시킨 축과 각도와 같이 회전시킨 것이 맞는지요?

  • hoyoso 2015.11.26 21:27 신고 ADDR 수정/삭제 답글

    안녕하세요
    보통 카메라 외부 파라미터의 각 회전 성분을 알기 위해 오일러 분해를 사용하자나요?
    그런데 3D 변환 행렬의 33 부분 행렬(회전)을 오일러 분해하여 회전 각도를 얻는 것은 이론상 맞지 않는 것인가요?
    카메라는 가만히 있고 객체가 움직였을 때의 매칭포인트를 이용해서 3*4 3차원 변환 행렬을 구하는데요,
    이 행렬을 가지고 각 축으로 어떻게 회전(r)되고 움직였는지(t) 구하는 것이 목적입니다.
    회전 행렬을 오일러 분해하면 일관성이 없는 것 같아서요,,
    위 댓글처럼 다른 방법(essential matrix, fundamental matrix)으로 접근해야 하나요?

    • BlogIcon 다크pgmr 2015.11.27 14:16 신고 수정/삭제

      회전행렬로부터 오일러 각도를 구할 수 있는 것은 맞구요 3*4 변환 행렬을 구할 수 있다면 그렇게 하시면 될 것 같습니다. 그런데, 그러한 3*4 변환행렬을 구하는 방법 중의 하나가 essential matrix나 fundamental matrix를 이용하는 것입니다. 다른 방법으로 구하는 것은 저도 잘 알지 못합니다.

  • hoyoso 2015.11.27 15:04 신고 ADDR 수정/삭제 답글

    답변 감사합니다
    네 4개 이상의 점을 이용해서 3*4행렬을 구했는데요.
    그러면 회전행렬을 뽑아서 각도 구하는 것이나.
    essential matrix에서 회전 행렬을 뽑고 거기에서 각도 구하는 것이나.
    차이가 없는 것인가요?
    시도해본 방법 모두 각도의 일관성이 없습니다 ㅠㅠ

    • BlogIcon 다크pgmr 2015.11.27 15:14 신고 수정/삭제

      여기서 점이 2d 영상좌표인가요? 아니면 3d 공간좌표인가요? 3*4 행렬이 [R|t]가 되려면 3d 공간좌표 사이에 변환관계이어야 할 것입니다.

    • hoyoso 2015.11.27 16:35 신고 수정/삭제

      3D 공간좌표의 매칭쌍입니다.
      essential matrix 를 구할 수 있었던 이유는 내부 파라미터를 이용하여 픽셀 좌표로 변환할 수 있었죠.

    • hoyoso 2015.11.27 16:42 신고 수정/삭제

      3*4 행렬을 구할 때는 cv::estimateAffine3D 를 이용해서 구했습니다.
      내부 소스를 보고 RANSAC을 이용하는 것이 아닌,
      n point 모두 이용하게끔 구했습니다.
      이 때 파라미터를 고려하여 구한 것이 아니므로 essential matrix 를 이용하는 것과 가깝다고 할 수 있나요?

  • hoyoso 2015.11.28 01:08 신고 ADDR 수정/삭제 답글

    댓글을 적다보니 제가 회전 행렬을 구할 때 오류가 있었네요.
    3*4 행렬을 구할 때는 essential matrix 원리를 이용하여 3차원 매칭쌍으로 matrix를 구했는데,
    반대로 essential matrix를 구할 때는 2차원으로 투영시킨 매칭쌍을 이용한 거네요.
    3차원 매칭쌍으로 essential matrix를 구하게끔 구현해야 할 것 같은데.. 안될 것 같아요....
    애초에 3*4 행렬에서 3*3 부분만 뽑아서 오일러 분해하면 왜 안나오는지도 모르겠구요 ㅠㅠ

    • BlogIcon 다크pgmr 2015.11.28 22:37 신고 수정/삭제

      원래 essential matrix는 2d 이미지 매칭쌍 사이의 관계인데, 이를 3d로 구한다는 것이 어떤 의미인지 모르겠네요.. essential matrix를 구한 후 이를 다시 분해(opencv에서는 decomposeEssentialMat 함수를 이용)해야지만 회전변환 R과 translation t를 구할 수 있습니다.

  • hoyoso 2015.11.28 23:05 신고 ADDR 수정/삭제 답글

    그럼, 2d 이미지 매칭쌍으로 회전변환 R을 구하고 각 성분의 회전 각도를 얻을 때,
    1. 매칭쌍으로 essential matrix를 구한 다음 recoverPose로 얻은 회전변환의 각도는 이상하게 나오고
    2. 매칭쌍으로 fundamental matrix를 구한 다음 essential matrix를 구하고(E=K^tFK), 이어서 recoverPose로 얻은 회전변환의 각도는 잘 나오는게 말이 되나요?

    • BlogIcon 다크pgmr 2015.11.29 00:53 신고 수정/삭제

      정상적인 절차를 거쳤는데도 원하는 결과가 나오지 않는 이유는 제가 알수 있는 부분이 아닙니다. 제게 조언을 구하셨기에 혹시 절차상에 또는 이해상에 문제가 없는지 확인을 위해 몇가지 글을 적은 것임을 유념하시기 바랍니다.

  • 감사합니다 2016.10.27 17:08 신고 ADDR 수정/삭제 답글

    안녕하세요 회전 행렬에 관해 여쭤보고 싶습니다.
    1. 위의 회전 행렬 식중에 x,z의 회전 행렬 식과 y의 회전 행렬 식에서 sin과 -sin의 위치에 차이가 있어 보이는데 y만 다른 이유가 어떤것인지 설명해 주실수 있나요?

    • BlogIcon 다크pgmr 2016.10.27 23:05 신고 수정/삭제

      예리하시네요. 사실 저도 몰랐는데 보니까 그렇네요 ^^. 어쨌든 그건 회전의 방향과 관련이 있습니다. 오른나사 법칙을 적용해서 x축을 기준으로 했을 때 y->z로 회전하고 z축을 기준으로 했을 때는 x->y로, y축을 기준으로 했을 때는 z->x로 회전합니다. 즉, y축만 회전 방향이 변수의 순서와 반대입니다. 그리고 z->x로 회전시키기 위해서는 - 위치가 바뀌어야 합니다.

    • 감사합니다. 2016.10.31 22:55 신고 수정/삭제

      아 그렇게 생각하니...알것같습니다. 답글 남겨주셔서 감사합니다.

  • 안녕하세요 2017.05.03 15:28 신고 ADDR 수정/삭제 답글

    안녕하세요. 좋은 글 잘봤습니다. 궁금한 점이 있는데요. 매칭쌍이 3개이상인 즉, 4개, 5개인 경우에도 똑같이 3개만 잡아서 변환해주면 되니까 그이상의 매칭쌍은 의미가 없는것 아닌가요??
    또 R2를 구하는 과정에서 회전축을 p1p2로 잡으신다고 그러셨는데 명확히 말하면 p1'p2'이 맞지않을까요??

    • BlogIcon 다크pgmr 2017.05.04 18:09 신고 수정/삭제

      네, 오차가 없다면 3개로 충분하지만 측정 오차가 존재한다면 다수의 매칭쌍이 의미가 있습니다. 관측값으로부터 모델을 추정하는 문제는 대부분 측정오차가 존재한다고 볼 수 있습니다.
      그리고 R2를 구하는 과정에 대한 설명은 말씀하신 내용이 맞습니다. 혼동의 여지가 적도록 관련 내용을 수정하였습니다.

  • Cjr 2017.08.18 18:45 신고 ADDR 수정/삭제 답글

    안녕하세요 2014년에 답변 다신 4.2.2 회전 두번하지않고 로드리게스 공식으로 한번에 가능한 방법이 잇을거라하셧는데 혹시 관련해서 포스팅하신것이 잇는지 아님 관련자료를 어디서 봐야할지 궁금합니다 구글에 서너개 키워드로 쳐봐도 못찾겟네요 ㅜㅜ

    • BlogIcon 다크pgmr 2017.08.19 07:56 신고 수정/삭제

      안녕하세요. 3x3 행렬로 표현된 두 회전변환 R1, R2가 있을 때, 두 행렬의 곱 R2*R1은 회전변환 R1을 적용한 후 R2를 적용하는 변환입니다. 그런데, 두 행렬의 곱 R = R2*R1은 새로운 3x3 행렬이고 이 행렬은 하나의 회전변환으로 볼 수 있습니다. 따라서, R의 회전축과 회전각을 찾으면 두 회전변환이 어떤 하나의 회전변환으로 표현될 수 있는지 기하학적으로 해석할 수 있을 것입니다. 그리고 회전변환 행렬의 회전축과 회전각을 구할 수 있는 방법 중 하나가 Rodrigues를 이용하는 것입니다. Rodrigues에 대한 내용은 http://darkpgmr.tistory.com/99 글을 참조해 주세요.

    • Cjr 2017.08.21 15:33 신고 수정/삭제

      그럼 결국, 로드리게스는 표현방법의 하나일 뿐이고, 회전변환 R 자체는 본문에 쓰신거처럼 R1, R2를 구해야 하는건가요? 아님 R을 바로 구할수있는것인지요

    • BlogIcon 다크pgmr 2017.08.21 18:19 신고 수정/삭제

      네, rodrigues는 회전변환을 표현하는 방법 중 하나입니다. 그리고 회전변환을 구하는 방법은 여러 방법이 있을 것으로 생각됩니다만 제가 풀어본 방법은 본문에 적은 바와 같습니다.

  • Cjr 2017.08.21 17:23 신고 ADDR 수정/삭제 답글

    안녕하세요 4.2.2 R2 구할때 질문인데요 '벡터 R1*p1p3와 벡터 p1'p3' 사잇각을 구하는 것은 바람직하지 않습니다. 두 벡터를 R1*p1p2에 수직인 평면에 projection 시킨 후 사잇각을 구해야 합니다' 라고 하셨는데, 이 부분이 이해가 안가서요 R1 변환을 취하면, R1p1p3와 p1'p3'는 같은 평면에 속하게 되는거 아닌가요? 벡터 p1p2와 p1p3의 관계(각도)가 벡터 p1'p2'와 p1'p3'의 관계(각도)와 같기때문에 결국 p1p2와 p1'p2'가 R1변환을 통해 같아진다면(벡터이니) 자연스럽게 p1p3벡터와 R1p1'p3' 벡터는 같은 평면위에 속하게될거같은데요. 즉, R1p1p2(=p1'p2') 벡터를 손가락으로 잡고 360도 회전시키다보면 R1p1p3벡터와 p1'p3' 벡터가 일치하게될거같은 생각이 들어서요

    • BlogIcon 다크pgmr 2017.08.21 18:26 신고 수정/삭제

      우산을 예로 들어보도록 하죠. 반쯤 접혀져 있는 우산이 있고 우산을 돌려서 한쪽에 있는 우산살이 반대편에 있는 우산살까지 가도록 회전을 시킨다면 180도를 회전시키면 됩니다. 하지만 서로 반대편에 있는 두 우산살 사이의 사이각은 180도가 아닐 것입니다.. 햇갈리는 부분이긴 합니다만 찬찬히 보시면 이해가 되리라 생각됩니다.

    • Cjr 2017.08.22 14:00 신고 수정/삭제

      오 이해가 바로 됐네요

      감사합니다!!