티스토리 뷰

매트랩을 사용하는 시험 대비를 하다가 문득..

매트랩으로 벡터는 어떻게 그리지? 하는 궁금증이 들었다.

 

x, y, z 축을 기준으로 하는 유닛벡터를 3차원 그래프로 어떻게 그릴 수 있을까??

 

일단 제일 만만한 plot, plot3은 아니다 ㅎㅎ..

바로 quiver3(3차원 퀴버 플롯)을 사용해야 한다고 한다.

 

 

Matlab doc에 따르면 quiver3은 다음과 같은 파라미터를 넣어주면 된다

 

quiver3(x, y, z, u, v, w)

 

x, y, z = 각 벡터의 원점

u, v, w = 각 벡터의 성분

그 뒤에 붙는건 옵션 (선 색깔)

 

 

뭔소린지 모르겠으니 바로 코드로 알아보자

# 방법 1.

o = [0,0,0]; // 원점

x = [1;0;0]; // i방향 단위벡터(열벡터)
y = [0;1;0]; // j방향 단위벡터
z = [0;0;1]; // k방향 단위벡터

// i, j, k 세방향 단위벡터 그리기
// ** x, y, z 열벡터를 행벡터로 전치해서 넣는다 ** 
quiver3(o, o, o, x', y', z', 'r')

 

 

짜잔!!

 

 

이걸 알면 벡터의 내적, 외적으로 지지고 볶아도 매트랩 한방이면 벡터의 방향을 도식화할 수 있다.

 

그런데 조금 문제가 생겼다.

두 벡터와, 그 벡터를 외적한 총 세개의 벡터를 그려봤는데, 누가 누군지 분간이 되지 않는다.

저 세가지 벡터가 하나로 묶여서 따로 범례를 표시해봐도 한 세트로 묶여버린다.

 

이건 뭔가 내가 원하던 그림이 아닌데

더 개선된 방법이 필요하다

 

# 방법 2.

quiver3(0, 0, 0, 1, 0, 0, 'r', "DisplayName", 'x')
hold on
quiver3(0, 0, 0, 0, 1, 0, 'b', "DisplayName", 'y')
quiver3(0, 0, 0, 0, 0, 1, 'g', "DisplayName", 'z')
hold off
legend

 

범례를 추가하고 벡터마다 색을 다르게 해서 훨씬 보기좋은 그래프가 만들어졌다.

이게 딱 내가 원하던 그래프의 모습이었다!

 

근데 뭔가 수동으로 좌표 찍어주는게 썩 마음에 안든다.

조금만 이쁘게 만들어보자

 

# 방법 3(진짜 찐 최종).

% TEST
x = [-1;2;2];
y = [1;2;-1];
z = cross(x, y);

% PLOT
quiver3(0, 0, 0, x(1), x(2), x(3), 'r', "DisplayName", 'x')
hold on
quiver3(0, 0, 0, y(1), y(2), y(3), 'b', "DisplayName", 'y')
quiver3(0, 0, 0, z(1), z(2), z(3), 'g', "DisplayName", 'z')
hold off
legend

 

 

아주 만족스럽다.

이게 딱 내가 원하던 그림이었다.

누가 누군지 잘 구분된다.

 

그럼 해결!

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함