반사벡터
Reflection Vector
반사 벡터는 정반사이다.
정반사는 입사각과 반사각이 동일한 반사를 의미한다.
◎ 투영 벡터
반사 벡터를 구하려면 투영 벡터를 먼저 구해야 한다.
투영이란 어떤 벡터 v를 단위 벡터 n에 내적하여 구할 수 있는 v의 n방향으로의 길이를 뜻한다.
내적값이 스칼라이므로 투영된 방향으로의 벡터를 구하려면 이 내적값에 방향벡터 n을 곱해주면 된다.
(v·n)n을 이용해 벡터를 구할 수 있게 된다.
* 왜 이렇게 되는지 추가 설명!
v와 n을 내적하면 cosθ를 결과값으로 얻게 된다.
v·n = ||v||||n||cosθ
여기서 이 삼각형은 직각삼각형이므로 코사인값은 밑변/빗변 즉, ||n|| / ||v|| 이다.
||n|| = ||v||cosθ 이고 투영한 길이를 w라고 했을 때
w = ||v||cosθ가 된다.
길이를 구했으니 방향도 알아야 하는데, 길이가 1인 단위벡터는 방향의 정보만을 갖고 있으므로
단위벡터인 n의 방향으로의 길이를 구하려는 투영의 값에 n을 곱해주면 된다.
n의 방향 벡터 = n / ||n||
투영 벡터 = ( n / ||n|| ) * ||v||cosθ
하지만 두 벡터 사이각을 항상 알 수 없으므로
v·n = ||v||||n||cosθ 라는 사실을 응용해서 v·n/||n|| = ||v||cosθ 이런식을 만들어내면
두 벡터만 주어졌을 때, 한 벡터를 다른 벡터에 투영하는 공식을 구했을 때
((v·n) / ||n|| ) * ( n / ||n|| ) 이런 공식이 나오게 된다.
◎ 반사벡터
투영 벡터를 이용해 구한 벡터로 반사 벡터를 계산한다.
다음과 같이 입사벡터(P)와 법선 벡터(n)이 있을 때 반사 벡터(R)은 입사벡터(P)와 크기가 같고 반사각과 입사각이 같다.
P와 n을 이용하면 반사벡터(R)을 구할 수 있다.
우선 위의 투영 벡터를 구하는 방식을 이용해 입사 벡터 P의 역벡터 -P를 n의 연장선상에 투영시켜서 투영벡터 n(-P · n)을 구한다.
어떻게 투영 벡터를 구하는건지?
이렇게 돌려보면 쉽게 알 수 있다!
그 후 입사 벡터 P의 시작 위치를 원점에 위치 시키고 투영으로 구한 n(-P·n)를 더하면 입사면에 투영된 벡터의 위치를 구할 수 있다.
입사 벡터 P에 n(-P·n)를 한 번 더하면 입사면에 투영된 위치를, 두번 더하면 반사벡터 R을 구할 수 있다.
따라서 반사벡터 R을 구하는 공식은 다음과 같다.
R = P + 2n(-P·n)
참고 자료;
https://toymaker.tistory.com/entry/%EB%B0%98%EC%82%AC-%EB%B2%A1%ED%84%B0-Reflection-Vector
https://ifyouwanna.tistory.com/entry/%EB%B0%98%EC%82%AC%EB%B2%A1%ED%84%B0
'GameProgramming > 게임수학 & 물리' 카테고리의 다른 글
[게임수학] 슬라이딩 벡터 (Sliding Vector) (0) | 2021.10.07 |
---|---|
[게임수학] 행렬 下 (행렬식, 역행렬, 딸림행렬) (0) | 2020.02.16 |
[게임수학] 행렬 上 (연산, 단위행렬, 전치행렬) (0) | 2020.02.12 |
[게임 수학] 포물선과 원 충돌체크 (0) | 2020.01.21 |
[게임 수학] 두 점 사이의 거리 구하기 (0) | 2020.01.21 |