벡터의 내적 정의는 [프로그래밍/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 |