감자닷넷 주인장께서 홈페이지 리뉴얼을 하셨드라고요 다시 올립니다~

 

 

http://www.gamza.net/

 

 

 

반사벡터


 

전반사는 물체가 충돌하여 튕겨나갈때 라던가, 빛의 반사, 당구공등의 구현에 사용되는데, 이것은 벡터를 가지고 생각해보면 생각보다 매우 간단하게 구현됨을 알수 있습니다. 


전반사

전반사는 입사벡터와 반사벡터의 크기가 동일하고, 입사각과 반사각이 같은 것을 말합니다.




여기서 우리가 풀고자 하는 문제는 충돌면의 법선벡터(N)와 입사벡터(D)만을 가지고 반사벡터([?])를 만들고자 하는것입니다.
그림을 보고 머리를 굴려봅시다.


negDprj : 벡터-D를 법선N에 투영한 벡터

위에나오는 직각삼각형은 모두 '합동'입니다.
따라서 [?]는 벡터negDprj를 두배로 한 벡터와 벡터D의 더한 벡터임을 알 수 있습니다.

[?] = 2 negDprj + D

여기에 투영벡터공식(negDprj)을 적용하면.....

[?] = ( 2 * (-D•N)/(N•N) ) N + D

만약 법선 벡터 N이 단위벡터라고 가정하고 정리하면...

[?] = ( 2 * (-D•N) ) N + D

 


 

 

 

미끄러짐 벡터


 

 

충돌시엔 보통 미끄러짐 처리를 하게 됩니다. 이럴때 사용하는 미끄러짐 벡터를 구하는 법을 알아보도록 하겠습니다.

충돌시 속도벡터는 다음과 같이 충돌면에 수직인 성분과 평행인 성분으로 분리됩니다.
여기서 수직성분은 없애고 수평성분에 해당하는 이동을 하는것이 여기서 구현하고자 하는 '미끄러짐'입니다.

자, 이제 문제는 물체의 속도벡터(V)와 충돌면의 법선벡터(N)로부터 속도벡터의 수평성분을 구하는 것으로 정리되었습니다.
그런데 여기서 V의 수직성분이라 함은....V를 N에 투영한 벡터(Vprj)를 말합니다.
따라서 투영벡터공식을 적용해서 Vprj를 구하면...
Vprj = ( (V•N)/(N•N) ) N
V를 알고, V의 수직성분을 알게되었으니 우리의 목표인 V의 수평성분은 아래와 같이 구해집니다.
속도벡터의 수평성분 = V - Vprj = V - ( (V•N)/(N•N) ) N
만약 법선 벡터 N이 단위벡터라고 가정하고 정리하면...
속도벡터의 수평성분 = V - (V•N) N
 
 
 
 
 

반응형

+ Recent posts