'math'에 해당되는 글 3건

  1. 2016.09.21 벡터(vector)의 연산
  2. 2011.03.09 벡터(vector)의 길이 (4)
  3. 2011.03.08 기저 벡터(basis vector)
"터는 두 점들 사이의 차이 또는 변위(displacement)를 나타낸다."

기하학에서의 벡터..
기하학에서의 벡터 (일반적으로 'v' 라고 표현 된다)는 크기(or 길이)와 방향을 가지는 요소이고 끝이 화살표인 선분으로 표현된다(그림 1).

그림 1그림 1


길이(or 크기)가 1인 벡터는 '단위' 또는 '정규화된' 벡터라고 한다. '제로 벡터'는 길이(or 크기)가 0이고 방향을 가지지 않는다. 또한 벡터는 위치를 가지지 않는다. 위치와 상관 없이 동일한 크기와 방향을 가지는 벡터는 같다는 것을 기억하자.

게임에서 벡터는 '방향'과 '변화', 이 두가지 의미로 사용 될 수 있다. 설명은 뒤에 벡터의 연산부분에서 차차 하도록 하겠다.

벡터의 연산
실수와 마찬가지로 벡터도 산술 연산이 가능하다. 기본적인 연산은 '덧셈'인데 기하학적으로 덧셈은 두 벡터를 결합해서 새로운 벡터를 만든다. 
R = A + B

그림 2


R = A- B

그림 3


뺄셈의 결과 벡터는 두번째 벡터(B)의 머리에서 첫번째 벡터(A)의 머리로 이어진 다는 것을 기억하자.

'벡터 덧셈'의 대수학적 법칙들은 실수의 그것과 상당히 유사 하다 :
  1. v + w = w + v (교환 법칙)
  2. u + (v + w) = (u + v) + w (결합 법칙)
  3. v + 0 = v (덧셈의 항등원)
  4. 모든 v에 대해 v + (-v) = 0 식을 만족하는 벡터 -v가 존재한다. (덧셈의 역원)

또 다른 연산자로 '스칼라 곱셈'이 있는데, 하나의 실수 값을 벡터에 곱해서 벡터의 길이를 변화 시킨다  :
  5. (ab)v = a(bv) (결합 법칙)
  6. (a + b)v = av + bv (분배 법칙)
  7. a(v + w) = av + aw (분배 법칙)
  8. 1 dot v = v (곱셈의 항등원)

내적(dot product)
내적은 scalar product(스칼라 곱) 또는 dot product라고도 하며 기호로 ·(dot)을 사용한다.
내적을 구하는 방법은 두가지 :
1. 벡터의 각 성분값을 곱하여 더하는 것
  A·B(벡터 A와 B의 내적)
  = (Ax * Bx) + (Ay * By)
2. 두 벡터의 크기를 곱하는 것
<u,v>= u·v = |u| |v| cosθ
- |u|는 u벡터의 크기를, |v|는 v벡터의 크기를 의미합니다. (벡터의 크기에 관해서는 [진리는어디에] - 벡터(vector)의 길이를 참고해 주세요)
θ는 u라는 벡터와 v라는 벡터가 이루고 있는 0과 180도 사이의 각입니다
- 여기서 벡터 v의 크기가 아니라 |v|cosθ 와 같이 곱해주는 이유는 실제 벡터 u에 미치는 영향은 |v|cosθ 이기 때문이다.
- 폴리곤의 노말 벡터와 라이트의 디렉션 벡터를 내적해서 빛의 반사량을 결정 할수 있다.
- 프로그래밍을 할때 내적은 보통 단위 벡터와 함께 사용된다.
외적(cross product)
a X b : a cross b로 읽음

두 갱의 벡터에 수직하는 벡터의 방향과 크기를 구하는 연산

...
오늘은 여기까지..
http://oldadams.springnote.com/pages/5135455
http://icprmr.snu.ac.kr/PHP/ICPR_IP/DRSong/PDF_FILES/Ch03.pdf


'진리는어디에' 카테고리의 다른 글

Unity를 사용하기 전에 알아두면 좋은 기본 개념들  (1) 2017.04.07
게임에서의 동기화  (0) 2017.03.28
벡터(vector)의 연산  (0) 2016.09.21
삼각함수  (0) 2016.06.27
리팩토링 - Position 클래스  (0) 2016.02.14
Unity Asset Bundle  (0) 2016.01.29
Posted by kukuta
TAG 3d, math

댓글을 달아 주세요

[진리는어디에] - 벡터(vector)

이전(벡터관련 포스팅 참조)에 벡터는 크기와 방향을 가진다고 했으며, 그중 크기를 나타내는 것이 바로 벡터의 길이다.


a = <10, 5, 2> 일 때, 벡터 a의 크기는 얼마인가??

대략 보면 답이 없다. 값 세 개로 벡터의 크기를 구하라니..
이번 포스트에서는 주어진 벡터로 그 '길이'를 구하는 방법에 대해서 공부해 보도록 하겠다.

들어가기에 앞서..
 - 벡터의 길이는 당연히 스칼라 값이다.
 - 벡터의 길이를 나타내기 위해 ||v||와 같은 방식으로 표기한다(절대 값을 나타내는 |a|와 구분하기 위함)
를 알아 두자.

수학 책에 나오는 R^n인 공간에서 벡터의 길이를 구하는 공식은 간단하다 :

||v|| =  sqrt(v0^2 + v1^2 + v2^2... + vn^2)
(sqrt는 '루트'라고 생각하자. 텍스트로 표현할 방법이 없다..-_-;;)

하지만 어떻게 저런 공식이 나왔는지에 대해서는 설명을 자세히 하는 책이 드물다. 오늘은 어떻게 저런 공식이 나오게 되었는지를 연구해 보도록 하자. 문제를 간단하게 하기 위해 1차원에서 부터 시작 해 보자.

1차원 공간에서 벡터의 길이 구하기
1차원에서 벡터의 길이를 구하는 것은 직관적이며 쉽다.  1차원이라는 공간은 직선 하나 뿐인 공간이다. 벡터가 뻗을 수 있는 방향은 한방향 뿐이고 주어진 좌표가 바로 벡터의 크기다. 
예를 들어 a = <10>인 벡터의 길이는 10이다.
||a|| =  sqrt(10^2)

2차원 공간에서 벡터의 길이 구하기
2차원 공간의 벡터는 x, y 두 축 내에서 모두 표현 가능하다. 일반 적으로 a = <xi, yj>와 같은 형태로 쓰여 지며 그림으로 표현 한다면 아래처럼 표현이 가능하다.

그림 1(from. http://www.nicklib.com/bbs/board.php?bo_table=bbs_scrap&wr_id=12)


뭔가 느껴지는 것이 없는가? 바로 '직각 삼각형'으로 그리는 것이 가능하다는 것이다. 직각 삼각형이 가능하다면 그 유명한 '피타고라스의 정리'가 적용 가능 하다는 의미이기도 하다.

그림 2 from. http://math.kongju.ac.kr/math/lrn/3pldl1.html


만일 a = <10, 5> 인 2차원 벡터가 있다고 하자. 위의 [그림 1]처럼 그림을 그리게 된다면 빗변의 길이를 구하는 것이 바로 벡터의 길이를 구하는 것이된다. 그렇다면 :

||a|| =  sqrt(10^2 + 5^2)


와 같이 정리 될 수 있다.

3차원 공간에서 벡터의 길이 구하기
1차원 벡터는 그냥 좌표가 길이고, 2차원 벡터는 피타고라스 정리를 이용하면 된다는 것을 알았다. 하지만 아래와 같은 3차원은 어떻게 해야 할까?


나의 경우는 문제를 간단히 하기 위해서 두개의 평면을 분리 하는 방법을 사용했다. 먼저 x, y 축이 이루는 평면에 대한 벡터의 길이를 구한다. 그러고 나면 z 축에는 수직인 직선 하나가 만들어 지고, 우리는 그 직선의 길이를 알수 있다. 그럼 이것을 다시 하나의 평면으로 생각하고 피타고라스의 정리를 한번 더 적용한다. 이렇게 되면 우리는 최종적으로 3차원 공간에 적용된 벡터의 길이를 구할 수가 있다. 

예를 들어 a = <10, 5, 2>일 때 벡터의 크기를 구하는 방법을 살펴 보자. 

||a|| =  sqrt(10^2 + 5^2 + 2^2)

 
위와 같은 방식으로  한 차원 한 차원 장인 정신으로 직선을 압축시켜 가면 n차원 까지 벡터의 길이를 구할 수 있고 그것을 공식화 하면 ||v|| =  sqrt(v0^2 + v1^2 + v2^2... + vn^2) 와 같은 형태가 된다.

오늘의 포스팅은 여기까지..

피타고라스의 정리 - http://math.kongju.ac.kr/math/lrn/3pldl1.html


Posted by kukuta

댓글을 달아 주세요

  1. ㅅㅅ 2012.03.21 14:10  댓글주소  수정/삭제  댓글쓰기

    고맙습니다ㅋ

  2. 감사 2012.06.20 10:45  댓글주소  수정/삭제  댓글쓰기

    잘 보고 갑니다.

  3. ㄴㅁㅇㄴㅁ 2012.10.29 00:29  댓글주소  수정/삭제  댓글쓰기

    결론적으로 (10,5,2)의 벡터값은 129라는 소리인가요??????결론을 좀...부탁드림..

기저 벡터란(basis vector)?

"벡터 공간에서 각각의 축방향을 가리키는 단위 벡터"

라고 한다.  간단해서 좋다.  조금 더 복잡한 정의를 찾아 보았다.

기저 벡터란 n차원 공간에서 임의의 벡터를 표현할 수 있는 기준이 되는 벡터이다.
n차원(R^n)에서는 n개의 벡터가 있어야 기저 벡터가 이루어지며, 또한 벡터가 서로 선형독립적이거나 행렬식이 0이 되지 않아야 기저 벡터이다.

위의 정의도 결론은 n차원에서 임의의 벡터를 표현하기 위한 기준이 되는 벡터란다. 결국 축방향을 가리키는 단위 벡터라는 말이다. '선형 독립'에 관해서는 http://www.ktword.co.kr/abbr_view.php?m_temp1=4408&mgid=354 를 참조 하자.

기저 벡터에 대해 좀 더 자세히 설명하자면, 예를 들어 1차원 공간을 상상해 보자.  1차원이라고 하면 직선 공간을 말한다. 옆도 없고 위도 없고 오로지 일직선 하나만 있는 공간이다.  1차원의 기저벡터는 '1'이다. 거기에 무리수 or 유리수를 곱하면 1차원직선에 해당하는 모든 점들을 만들어 낼 수 있다

위의 1차원에서 그렸던 직선에 평행하지 않는 다른 직선을 그려보자. 이 두 직선을 이용해 평면. 즉, 2차원 공간을 만들어 낼 수 있다. 여기서 첫번째 직선의 기저벡터와 두번째 직선의 기저벡터가 각각 2차원의 기저벡터가 된다. "일반적"으로 직교 좌표계에서는 x, y 축의 단위벡터를 기저벡터로 삼는다. 하지만 직교좌표계가 아닌 일반좌표계(교차각이 90도가 아닌 경우)에서도 2차원 평면상의 모든 점을 결정 할 수 있다.

여기에서 차원을 하나 더해 우리 실생활과 같은 3차원을 만들어 보자. 위의 두 직선이 만들어낸 평면에 평행하지 않고 평면과 교차하는 직선을 추가하면 된다. 이 직선에서의 기저벡터와 이전 평면에서의 기저벡터가 각각 3차원의 기저벡터가 된다. 이 세 개의 단위벡터(일반적으로)를 이용해 3차원상에서 존재할 수 있는 모든 점들을 표현 할 수 있다.

정리하면 기저벡터란 공간을 표현하기 위한 기본 단위 정도로 생각할 수 있겠다. 기저 벡터에 유리수 or 무리수를 곱하면 해당 공간에서 그려 질 수 있는 모든 점을 표현 할 수 있고, 차원이 더해 질수록 필요한 기저벡터도 늘어난다.


벡터 기본 - [진리는어디에] - 벡터(vector)
기저 벡터 정의 - 정보통신 기술 용어 해설(http://www.ktword.co.kr/abbr_view.php?m_temp1=4131)
기저 벡터 설명 - GPG Study(http://www.gpgstudy.com/forum/viewtopic.php?t=2728)

Posted by kukuta

댓글을 달아 주세요