일정 시간마다 어떤 함수가 호출돼
그 함수에서는
Ball이라는 클래스가 있는데(Ball은 속도, 질량, 위치 이런 정보를 가지고 있고)
두 Ball의 위치로 충돌체크하고, 속도에 따라 위치 변하게 해주고, 충돌할 때는 운동량 보존법칙으로 벡터값이 변해
문제는 이거야
공 2개 충돌은 문제없는데
공이 여러개를 동시에 충돌시키려면 어떤 알고리즘으로 짜야돼?
이중 for문으로 각 공들끼리 충돌체크하면 문제 생기는거 같은데 말이야...
알려줭
일정 시간마다 어떤 함수가 호출돼
그 함수에서는
Ball이라는 클래스가 있는데(Ball은 속도, 질량, 위치 이런 정보를 가지고 있고)
두 Ball의 위치로 충돌체크하고, 속도에 따라 위치 변하게 해주고, 충돌할 때는 운동량 보존법칙으로 벡터값이 변해
문제는 이거야
공 2개 충돌은 문제없는데
공이 여러개를 동시에 충돌시키려면 어떤 알고리즘으로 짜야돼?
이중 for문으로 각 공들끼리 충돌체크하면 문제 생기는거 같은데 말이야...
알려줭
N body problem
간단한 문제는 아니네...
이건 알고리즘이 아니라 설계문제인데 공여러개 충돌한다는건 GUI 기반이라는소리인데 프레임단위의 게임형식이면 프레임으로처리할껀지 아니면 공충돌할때마다 이벤트큐에넣어서 콜벡으로 이벤트처리할껀지 근데만약 이벤트우선순위면 프레임저하도생각해야하는데 무튼 여러가지로생각해야함
어차피프레임단위로 처리할꺼면 공충돌할때 이벤트큐에넣고 프레임 랜더링하기 전에 이벤트큐에있는거 순차적으로 처리해도되긴하겠다
프레임이던 뭐던 매 단위시간마다 모든 물체끼리 충돌검사..
ㅇㅋ
충돌은 성능 문제 생기면 격자 쪼개서. 안 생기면 걍 죄다 검ㅋ사ㅋ
공 3개 이상 충돌의 경우는 없지 않나?
연속된 충돌일뿐
이거 그냥 구상만 해본건데 일단 공에 움직임을 줘. 주고나서 그 공과 부딪히는 오브젝트가 있나 검사를 해.
그리고 부딪힌 놈이 있으면 그놈의 컨트롤을 얻어와. 인덱스를 주던 포인터를 넘기던간에 말야
그리고 부딪힌 놈한테 OnCollision(운동량)같은 함수를 만들어서 넘겨줘
그리고 그 운동량에 맞춰서 부딪힌 놈이 이동해. 그건 OnCollision내부에서 처리하던 Movement함수를 따로 호출하던 상관없어 방향이랑 힘만 있으면 되잖아?
그리고 OnCollision이 끝나면 다시 원래 공으로 돌아올꺼잖아? 또 부딪힌 놈이 있나 검사해. 없으면 그 공의 Progress를 종료.
이렇게 하면 공 하나에 두개가 부딪혀도 충돌량 전달은 문제 없을거같고 OnCollision에서 운동량만큼 밀려나고 거기서 또 충돌 검사를 해볼수도 있을거야 물론 그렇게 되면 연산이 많이 복잡해지겠지
충돌한 공이 없을때까지 꼬리물기 하듯이 연산해볼수도 있고 모바일이라면 그 횟수를 1~2번으로 제한해서 검사하게
끔 해주면 될거같네 최적화가 중요하니깐
정리하자면 PlayerBall.Movement(vDir, fMass, fSpeed) -> if (FindCollision.getTarget(&TargetCtrl;)) -> TargetCtrl.OnCollision(vDir, fMomentum) -> TargetCtrl.Movement(vDir, fMomentum) -> if (FindCollision.getTarget(&TargetCtrl;)) -> 일정횟수 반복
정말 대충 구상해보니 이렇게 될거같당...