'정인'님의 질문을 최근에 받은게 있는데 댓글로 쓰기엔 좀 길고, 또 포스팅하기에 괜찮은 주제라 생각해서 어떤 정보를 담고있는 좌표의 회전행렬을 적용하는 방법에 대해 이야기를 할려고 합니다.




먼저 위의 5개 좌표를 보죠. 3차 공간의 좌표라 하더라도 뭔가 좀 길죠...


앞 세개는 좌표이고, 뒤에 두개는 어떤 정보라고 하죠. 이 정보는 좌표가 변해도 변하면 안되는 것입니다. 간단히 두개를 했지만, 이게 긴 길이의 정보라 해도 상관없습니다.


일단 합쳐서 하나의 행렬(P)로 두었습니다.


그 유명한 회전행렬인데요. 그냥 간단히  x-y-z축 변환이라고 하죠. 아... phi, theta, psi순입니다.


회전행렬을 다 곱한 것이구요


위와같이 회전행렬을 다시 정의해 두는 겁니다. 각 좌표에 붙어있던 정보만 생각하면, 5*2의 크기를 가지게 되는데, 그 정보를 건드리고 싶지 않으니, 위와 같이 O1은 3*2의 영행렬이고, O2는 2*3의 영행렬이고, I는 2*2의 단위행렬입니다.




응? 위에서는 Rn이 아니라 Rt인데요...ㅠㅠ 하여간 그냥 10,20,30도 변환이라고 해두겠습니다.


그리고 각 영행렬과 단위행렬을 만들고


최종적으로 Rn을 만들면 됩니다. 그리고, 좌표와 정보를 담은 P행렬과 곱해주면 되죠


결과를 보시면, 좌표는 변했지만, 정보는 변하지 않았다는 것을 알 수 있습니다.






http://pinkwink.kr/trackback/404 관련글 쓰기
  • 정인 2011/01/19 05:15

    고맙습니다. 핑크윙크님이 뚝딱뚝닥 코딩하시는게 신기하고 부럽네요.
    우선 질문이 있는데요.
    (1) 변환행렬을 얼마큼 확장할수 있나요? 저는 데이타 갯수가 10^7개가 되는데, x,y,z 크기가 210x210x210이라서요. 그럼 저는 Rn이 [4x10^7]*[10^7x4]가 되어야하거든요. 제 생각이 맞나요?
    (2)항상 plot을 y=f(x)로된 경우만을 그려만봐서, 좌표(1.7057,-0.8364,0.6464)에 데이타 2.3e-11같은 값을 그래프상에 위치시키려면 좌표를 어떻게 만들어야하는지 궁금합니다.
    정성껏 설명해주셨는데, 질문만 또 남겨서 죄송합니다.

    • PinkWink 2011/01/19 10:24

      본문에 있듯이 변환행렬이야 가능한만큼 확장해도 상관없습니다. 그러나 그렇게 데이터 양이 많다면, 차라리 좌표만 따로 뽑아서 변환하고 다시 좌표를 업데이트하는 방법이 가장 효율적일거라 생각합니다. 그리고, 좌표에 데이터를 특정짓는 그래프표현은 직접 고민하셔야합니다. 단순히 텍스트로 표현할 건지 색으로 구분할건지 기호를 쓸건지 .. 표현으로써 뭐가 좋은지는 '정인'님의 몫입니다.

  • 정인 2011/01/19 07:42

    핑크윙크님, 제가 생각해봤는데, 제 문제를 해결하기위해서는 아무래도 좌표공간이 두개가 필요할 것 같습니다. 그래서 하고싶은 일은 (1) x,y,z축범위가 각각 -250에서 +250까지 되는 3차원 좌표공간과, (2) x,y축범위가 각각 -100에서 100이고 z축이 0에서 199이되는 정육면체의 3차원 좌표공간 두 개가 있다고 할 때, 이때 두 좌표축의 원점은 일치하고, 정육면체를 회전변환 시켰을때, 좌표공간 -100에서 100과 0에서 199에 존재하는 데이타들이 matrix로 표현이 되도록 하려구요. 혹시 방법이 있을까 여쭤보고싶습니다.

    • PinkWink 2011/01/19 10:26

      정말 솔직히 말씀드리면, 아직 저는 '정인'님의 의도를 파악하지 못하고 있습니다. 댓글에 대한 댓글로는 힘든 과정인것 같습니다. 그리고, 이쯤되면, 제가 보기에는 제가 할 수 있는 범위(간단히 포스팅하거나 댓글을 다는....)를 넘어선것 같습니다.ㅠㅠ

  • 핑구야 날자 2011/01/19 08:18

    행렬. 벡터,,, 아이고 머리야,,,

    • PinkWink 2011/01/19 10:26

      ㅎㅎ.. 저는 허리가 .. 좀 아픈듯 합니다.^^

  • 구차니 2011/01/20 18:33

    행렬도 다시 한번 봐야 하나 고민을 하고 있던 1인 입니다 ㅋ
    이제는 정석책도 다 잊어 버려서 으헝헝 ㅠ.ㅠ

    한번 시간내서 정석책을 정독해야겠어요

    • PinkWink 2011/01/21 15:48

      ㅎㅎ.. 정석은.. 참.. 저도 석사시절 자주 보던 ㅠㅠ 책입니다...^^

  • 촌스런블로그 2011/01/23 02:10

    이거 참 머리가 지끈거리네요^^

    즐거운 주말 되세요^^

    • PinkWink 2011/01/24 07:54

      네.. 이번주말은 심심하지 않게 잘 보냈답니다.^^

  • 정인 2011/01/26 05:35

    질문이있어서 또 들렀습니다. ^^
    이번엔 3차원 공간상에 표현되는 반타원체와 직선이 만나는 교점을 구하는 방법때문에 이렇게 조언을 구하려고 부탁드립니다.

    • PinkWink 2011/01/26 19:05

      저도 사용해보진 않았습니다만 교점에 관한 예제 중 하나가 있습니다.

      open ipexangle.m

      를 command window에서 입력해서 코드를 분석해보시면 교점을 찾는 것을 학습하실 수 있습니다.

  • Nicatio 2011/01/31 12:25

    전기전자 관련 블로그를 운영하고 있는데 많은 도움이 될 것 같습니다.
    좋은 정보들 감사합니다~

  • 정인 2011/02/12 21:29

    제 생각에도 이렇게 댓글로 물어보는 것은 좋은 방법이 아닌것같아서 저도 계속 찾아보고 있었는데요. 제가 원하는 것을 다음 블로그에서 잘 설명해 놓았더라구요. 쉽게 변환도되고... 사실은, 이 매트랩 내장 함수를 몰라서 코드를 만드려고 방법을 강구중이였는데, 운좋게 오늘 이 함수를 찾을수 있어서 변환이 가능하게 되었습니다. 그래도 핑크윙크님께 많이 배웠습니다. 고맙습니다. ^^
    참고사이트>http://blogs.mathworks.com/steve/2006/08/17/spatial-transformations-three-dimensional-rotation/#3

    • PinkWink 2011/01/21 15:48

      아하.. 축하드립니다. 이런.. 제가 도움이 되지 못해 아쉽네요^^

    • 정인 2011/01/22 07:08

      아니 무슨 말씀을.... 여기에서 얼마나 많은 도움을 받는데요. 이해하기 쉽게 설명해주셔서 매트랩사용하는데 유익합니다. 늘 도움이 되고 있는 걸요..

    • PinkWink 2011/01/22 21:30

      네.. 그렇게 말씀해 주셔서 감사합니다.
      그리고.. 우리 모두 화이팅입니다.^^

  • 정인 2011/03/10 23:41

    figure를 많이 사용하다보니, matlab이 자꾸 느려지는데요. matlab그래픽 성능을 좀 빠르게 할 수 있는 방법이 있나요? 가상 메모리를 증가시키거나, 참 Java heap space가 어떤 거지요?

    • PinkWink 2011/03/11 08:51

      MATLAB이 느리다는건 정평이 나 있긴합니다만, 인터넷을 서치해보면, 느린기능의 경우 컴파일을 해버린다고들 합니다만, 저는 잘 모른답니다.^^

1 ... 3 4 5 6 7 8 9 10 11 ... 80