물리와 수학이 짧아서 구현에 어려움을 느끼네요
2D의 일반적인 핀볼을 만들려고 합니다.
야매로 물리를 구현하는 것은 어렵지 않은데
그렇게 구현하다보니 말도안되고 여러가지 문제가 생겼습니다.
저는 공의 반사를 다음과 같은식으로 구현했습니다.
군더더기 다빼고 반사부분만 적어보겠습니다.
Code: Select all
update()
{
vBallDir += vBallDir * vGravity;
vBallPos += vBallDir * fElapsedTime;
for(int i = 0; i < pin_count; ++i)
{
if(vec.length <= fBallRadian + fPinRadian)
{
vBallDir.x = randomf(-1.0, 1.0);
vBallDir.y -= (vBallDir.y * 2.0);
}
}
위아래 반사는 그냥 부딧친방향값의 반대방향의 2배만큼 더해주고
좌우반사는 구현할방법을 찾지 못하여 내비두었습니다.
(핀과 볼의 내적을 구하여 좌우에 대한 방향벡터를 구할수도 있을 것 같다는 생각을 했습니다만,
애초에 물리에 대한 제반지식이 없이 쓰면 오히려 더 복잡해질것 같아 내비두었습니다.)
어떻게 해야 제대로 구현을 할 수 있을지 잘 모르겠군요.
구글신한테 뒤져봐도 핀볼알고리즘이 잘 안나오고,
답변 부탁드립니다.