2014-09-15 6 views
2

빈 배경에 몇 개의 공이있는 곳에 제가 작성한 작은 애플리케이션이 있습니다. 그들은 모두 공중을 날기 시작하고 내가 쓴 물리학을 사용하여 정확하게 튀어 오르고 현실적인 충돌 응답을 갖습니다. 내 공이 서로 직접 닿을 때 서로 붙어서 직접 뜨는 문제를 제외하고는 어떻게 보이는지에 만족합니다. 여기 서클의 충돌 해결 문제

는 충돌 함수가 true를 돌려주는 경우 기본적으로, 그에 따라 자신의 속도를 변경하려면 ResolveCollision를 사용

https://gist.github.com/anonymous/899d6fb255a85d8f2102

을 포함 된 기능입니다.

나는이 문제가 ResolveCollision()에서하는 약간의 재 위치 설정에 있다고 생각한다. 그들이 충돌하면 나는 다음 프레임과 여전히 교차하지 않도록 프레임에 프레임을 가져다 놓습니다. 그러나 그들이 직접 위에있을 때, 작은 바운스에서 서로를 향해 튀어 나와 결국 프레임을 뒤로 젖히는 것이 그들을 잡아 당기기에 충분하지 않습니다.

이것이 문제인지 확실하지 않습니다. 문제가 있다면 해결 방법은 무엇입니까?

도움이 될 것입니다!

답변

2

트릭은 원이 서로 멀어지면 충돌을 무시하는 것입니다. 이것은 타임 스텝이 속도에 비해 충분히 작 으면 (즉, 원이 하나의 프레임에서 서로 통과 할 수없는 경우) 작동합니다.

원이 처음 충돌 할 때 속도 벡터를 조정하여 상대 속도 벡터가 그들을 밀어 내도록합니다 (충돌이이를 수행하기 때문에). 그 후에 원이 떨어져 나갈 것이고 결국에는 완전히 분리되기 때문에 더 이상의 충돌은 가짜입니다. 따라서, 떨어져 움직이는 물체 사이의 충돌을 무시하십시오. 그러면 당신은 잘되어야합니다.

(필자가 작성한 3D 스크린 세이버에서 알고리즘을 구현했지만 알고리즘은 완전히 차원에 구애받지 않으며 2D 서클에서도 잘 작동합니다.)

+0

아! 이것은 많은 의미가 있습니다! 그들이 서로 멀어지고 있는지 확인하려면 속도가 정확해야합니다. 그리고 결과가 부정적인 경우에 그들은 서로에서 이끌고 있습니까? – user3334986

+0

아닙니다. 실제로 상대 속도 벡터에 대해 상대 위치 벡터를 도트해야합니다. 상대 속도 벡터가 위치 벡터와 동일한 방향 (=> 멀리 이동)인지 또는 위치 벡터와 반대 방향 (=> 앞으로 이동)인지 알려줍니다. – nneonneo

+0

그것은 하나의 물체의 위치 대 다른 물체의 속도일까요? 또는 자신의 속도에 의해 점이 찍힌 자신의 위치? – user3334986