벡터의 내적 정의는 [프로그래밍/3D Programming] - [3D수학] 벡터의 내적 참고 해주세요.


벡터의 내적에 값을 이제 좀 더 편하게 할 수 있는 방법을 찾아 보도록 하겠습니다.


백터 내적의 공식은 다음과 같습니다.



그러나 프로그래밍에서 삼각함수를 사용하는건 프로그램의 성능을 저하 시킬 수 있기 때문에


좀 더 편한 방식을 알아보도록 하겠습니다.


벡터의 내적은 좌표값의 각 성분을 곱해서 더하면 됩니다. 과연 위에 공식이랑 똑같은 값이 나오는지 한번 확인 해보겠습니다.


벡터A와 벡터B의 내적은 각 성분을 곱해서 더하면 된다고 했는데요 


계산해보면 ( 4 X 6 ) + ( 3 X 0 ) = 24가 나오는 것을 알 수 있습니다.


그럼 위의 값이 우리가 만든 공식에 부합되는지도 알아볼려면


cos값을 알아야 되는데요 일단 위에 나온 값을 대입해서 증명 해보도록 하겠습니다.




벡터a의 절대값 곱하기 벡터b의 절대값에 cos값을 곱한 결과가 24입니다.



따라서 cos값은 


cos값은 대충 이런식으로 처리 됩니다.



원하는 값이 없네요.... 계산기로 두들겨 보니 가장 근사치의 값이.... cos36이네요



근데 이런 방식으로 구할려니 그냥 대충 때려 넣는 느낌이라 다른 방법으로 한번 찾아보겠습니다.


두점을 가진 벡터가 있고 그 사잇각( 사이각? ) 을 구하는 공식은 다음과 같습니다. 굳이 외울 필요는 없습니다



엄청 복잡해 보이지만 간단합니다.


벡터 v1 즉 a벡터의 크기는 5이고 v2 벡터 즉 b벡터의 크기는 6입니다 그리고 각 좌표의 값을 계산하면 저렇게 되구요


즉 사이의 각도는 입니다. 또 계산기를 두들겨 보면 다음과 같이 나옵니다.


애매하긴 합니다만 밑에 소수점은 버리기로 하였기 때문에 36도라고 하겠습니다.


그럼 위에 저희가 가정했던 각도가 일치 하는것을 볼수 있습니다.


그러므로 벡터의 내적은 각 성분을 곱해서 더하면 된다는 것을 알 수 있습니다.


프로그래밍에서는 각 성분을 곱해서 더하는 것으로 내적을 쉽게 구하는것이 성능에도 좋고 계산하기도 편합니다.


게임에서는 거의 대부분은 좌표값을 가지고 있기 때문에 내적은 저런식으로 표현해준다고 생각하시면 될 것 같습니다.


내적을 다른 방법으로 구하는 방법은 이제 보셨습니다 이제 게임에서 어떻게 활용하는지 알아 보도록 하겠습니다.


현재 주인공 케릭터의 위치에서 적이 있는 위치가 내 앞에 있는지 혹은 뒤에 있는지 계산하는 방법을 알아보도록 하겠습니다.


다음 그림에서 



주인공의 위치를 편의상 원점이라고 했을 경우에 적A와 적B의 위치는 주인공 앞인지 뒤인지 보면 그림으로 봤을 경우에는

적A는 주인공의 앞쪽 적B는 주인공케릭터의 뒷쪽인걸 알 수 있습니다. 

이걸 내적을 사용해서 알아보도록 하겠습니다.


내적은 각 성분의 곱이라고 말씀 드렸기 때문에

계산 과정은 생략하고 


적A와 주인공의 내적에 코사인값은 0.6 이고 적B와 주인공의 내적에 코사인값은 -0.6이 됩니다.

일반적으로 방향벡터는 단위벡터로 만들어줘서 계산을 좀 더 빠르게 할 수 있도록 합니다.


따라서 내적시에 값이 0보다 크면 앞쪽에, 0보다 작으면 뒷쪽에 있는것으로 판별 합니다.


간단하게 벡터의 내적의 활용의 예를 알아봤습니다.


이외에도 내적은 적이 주인공의 시야각안에 들어와 있는지 아닌지 확인하고, 선이 평면과 접하는 접점을 구할때도 사용되고

게임에 사용되는 곳이 많으므로 개념을 이해하고 있으시면 프로그래밍하는데 많은 도움이 됩니다.























'프로그래밍 > 3D Programming' 카테고리의 다른 글

[3D수학] 벡터의 내적  (1) 2017.11.24
[3D수학] 벡터의 덧셈과 뺄셈  (0) 2017.11.09
쉐이더란 무엇인가.  (0) 2016.11.21
< Culling의 종류 >  (0) 2016.11.21

벡터의 덧셈과 뺄셈을 정리 했으니 이제 슬슬 곱셈에 대한 개념이 나올때가 된것 같습니다.


벡터의 곱셈의 개념으로 벡터의 내적과 외적이 있습니다.


일단 이번 포스팅에는 내적을 다루겠지만 두가지 개념의 차이점만 짚고 넘어 가자면,


외적 ---> 결과값이 벡터

내적 ---> 결과값이 스칼라값. ( 실수 )


표현을 해줄때는 내적은 . (점) 표시

                      외적은 X 표시


입니다.


내적( dot product, inner product )에 대한 정의는 다음과 같습니다.

위에 그림에서 

로 정의하고   로 정의를 하겠습니다.  세타의 값은 일 때  내적의 정의는 다음과 같습니다.



벡터의 내적의 특징은 다음과 같습니다.



1번식은 딱히 설명 드릴께 없을 것 같습니다.

2번식은 동일 한 벡터가 있을 경우에는 두 벡터가 이루는 각은 0도이므로 cos0 = 1 입니다. ( 이부분은 나중에 삼각함수때 또 정리를 하도록 하겠습니다. ) 그러므로 벡터a의 절대값 ( 길이 )의 제곱이 되는것을 알 수 있습니다.


다음으로 두 벡터의 내적이 가지는 기하학적인 의미 를 얘기해보겠습니다. 머 기하학이라고 해서 어려운 얘기는 아닙니다.

  


다음과 같은 교환이 성립되는 이유는 a벡터의 크기는 실수, b벡터의 크기도 실수, cos 값도 실수기 때문에 교환 법칙이 성립됩니다.

a벡터의 크기 즉 벡터의 길이 X cos 값은 점A에서 수선의 발을 내린점이 H라고 했을때 즉 선분 OH의 길이가 됩니다.

그리고 벡터b의 값은 그림에서 보시는 바와 같이 선분 OB의 길이가 됩니다. 

따라서 선분 OB의 길이와 선분 OH의 곱은 a벡터와 b벡터의 내적과 같다라는 도출이 됩니다.

노란색의 빛이 비추었을 경우에 벡터a의 그림자 OH와 벡터의 길이의 곱이 됩니다.


정리하자면 두 벡터의 내적이 가지는 기하학적 의미는 한 벡터를 다른 벡터위로 정사영 시킨 길이와 그 다른 벡터의 길이의 곱셈이다.

위의 그림에서는 선분 OH와 선분 OB의 길이의 곱이 됩니다.


개념적인 부분은 이쯤에서 마무리 하고 다음 포스팅에서 벡터의 내적을 어떻게 게임에 활용하여 사용하는지 

확인 해보도록 하겠습니다.


'프로그래밍 > 3D Programming' 카테고리의 다른 글

[3D수학] 백터 내적의 활용  (0) 2017.12.04
[3D수학] 벡터의 덧셈과 뺄셈  (0) 2017.11.09
쉐이더란 무엇인가.  (0) 2016.11.21
< Culling의 종류 >  (0) 2016.11.21

+ Recent posts