컴퓨터 그래픽스 : 수학/게임 수학

[게임 프로그래머 입문 올인원] 게임수학 : 내적 (96강)

순정법사 2024.04.11

A. 내적

1. 내적의 기초

a. 내적이란? (dot product)

🌟V1*V2에 cos = 스칼라 곱이라고도 함

 

dot를 기억, 언리얼과 유니티 등 다 도트라는 이름으로 함수를 지원

 

V1 * V2인데 곱하기가 아니고 그냥 내적이라는 뜻

내적의 결과물은 방향에 대한 개념은 날아가고 크기만 남음 = 스칼라 

 

V2에 cos를 곱하면 삼각함수 공식에 의해 x값만 남게 됨 결국, x값끼리 곱하게 되는 것과 같다 (순서를 반대로 해도 동일)

 

b. 내적 응용하기

결국 x1*x2 + y1*y2로 계산됨

 

1) 내적이 0인경우 : 직각

2) 내적이 >0인경우 : 90도 보다 작다

3) 내적이 <0인경우: 90도 보다 크다

4) 둘다 단위벡터라면 1*1*cos가되어 코사인의 의미가 된다 

5) V1의 크기를 단위벡터로 맞춰주고 내적한다 = 스칼라값

 

c. 내적의 증명

삼각함수의 변을 피타고라스 법칙을 이용해 한쪽씩 구해주고

 

위에서 구한 값을 벡터를 이용해서 계산하게되면 위와같은 증명이 나옴

 

 

 

2. 게임에 내적 더하기

주제는 프로젝션, 몬스터가 마우스 가까운쪽으로 움직인다

 

a. Vector에 내적 추가하기

struct Vector 내부에 작성된 코드. 내적 공식을 작성해준다

 

b. 게임에서 몬스터만 보이게 수정하기

GameScene에서 플레이어는 잠시 삭제하고, 몬스터는 중앙에 배치해줌

 

c. 몬스터의 로밍범위와 몬스터 수정하기

몬스터 로밍 범위를 지정해주고

 

몬스터를 원으로, 로밍경로를 빨간색으로 칠해주기

 

그럼 몬스터(원)와 몬스터가 이동할 수 있는 범위가 빨간색으로 표시된다

 

d. 내적을 이용해 이동거리 구하기

몬스터는 로밍 범위 내에서 마우스 범위로부터 가장 가까운곳으로 위치하게 할것임

 

위와같은 공식으로 코드를 짤 예정!

 

먼저 벡터 1, 2를 구해주는데 벡터2는 마우스 포지션이 필요함

 

마우스 포지션은 기본으로 POINT를 받기때문에

 

Vector에서 POINT를 받는 생성자를 추가해주기

 

여기서 <windows.h> 해줘야함

 

그 뒤로 공식대로 코드를 짜주면 됨 / 범위도 설정해서 지정해주기

 

완성! 이렇게 마우스가 움직이는 곳 가까이 움직이게 됨!

 

💙 사용하는 곳

서랍을 열때 컨트롤을 제대로 하지 못하더라도 보정되어 잘 움직일 수 있게 함 = 프로젝션, 투영하다

 

 

 


출처 :https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com