2011-07-30 4 views
1

웜과 같은 생물의 시뮬레이션을 위해 물리 엔진을 구현하고 있습니다. 문제는 그들이 서로 수영하고 우주에서 같은 지점을 차지할 수 있다는 것입니다. 환경에 대한 아이디어가 있으니 비디오를 여기에서 제공합니다 : http://www.box.net/shared/mlddkslszbxd59cfdhpc'웜과 같은'생물의 2D 시뮬레이션에서 충돌 감지/해결에 대한 도움이 필요합니다.

그래서 나는 이것을 극복 할 수있는 충돌 감지 및 해결 알고리즘을 통합해야합니다. 탐지 부분에 대해서는 경계 서클을 활용했습니다. 각 신체 부분 주위에 배치 된 각 웜 넘어이라면 작은 미세 입자 검출 원 주변 검색을 트리거하는 외부 조 원 주어진다

Example of worms interacting with coarse grain and fine grain collision circles

즉 비트가 비교적 용이하다. 더 어려운 비트는 충돌이 발생할 때 무엇을 해야할지 결정하는 것입니다. 나의 첫 번째 생각은 기분을 상하게하는 대중을 서로 멀어지게 만들었다. 그러나 이것은 꽤 이상한 효과가 있었다. 좀 더 현실적인 방법은 문제가되는 부분의 속도를 근본적으로 떨어 뜨리는 속도로 변경하는 것입니다. 내 문제는이 속도와 관련 힘을 유도하는 방법입니다.

각 웜은 스프링과 포인트 덩어리로 만들어져 있습니다. 웜의 각 신체 부위는 4 점 질량과 6 개의 스프링 (나머지 두 개의 대각선 스프링이 있기 때문에)에서 나머지 사각형 모양을 취합니다.

도움을 청하면 정말 감사합니다! :-) 벤.

+0

clip.mov는 멋지게 보입니다. 미안 해요, 내 의견은 기술적으로 건설적인 아니지만, 정말 멋지다는 것을 알려 드리고 싶습니다. –

+0

헤이 Michał, 다행 당신이 그것을 좋아해요! 건배. –

+0

http : //gamedev.stackexchange에서 요청할 수도 있습니다.co.kr/ –

답변

0

마틴은 탄력적 인 충돌을 모델링하는 측면에서 올바른 방향으로 벗어났습니다. 그러나 처음에 깨닫지 못했던 것은 각 웜이 이동할 방향을 확인하고 서로 움직일 경우에만 속도 변경을 적용해야한다는 것입니다. 두 번째로 기분을 상정하는 대중의 위치는 각기 다른 경계를 통과 할 수있는 양을 빼서 업데이트해야합니다. 일반적으로 여기 대답은 매우 유용하다는 것을 발견

https://gamedev.stackexchange.com/questions/12059/why-do-objects-interpenetrate-in-this-simple-collision-solver

나는 거의 동일한 코드를 사용하고 예상대로 벌레에서 반사 서로의 주위에있다.

건배,

벤.

0

충돌 전에 X와 Y에서 각 벌레의 운동량 (속도 * 질량)을 합산하고 충돌 후 두 벌레 사이에서 이것을 나눔으로써 탄성 콜리 손 (에너지가 손실되지 않는 곳)을 모델링하는 가장 쉬운 방법 . 운동량은 일반적으로 질량으로 나뉘기 때문에 가장 간단합니다. 웜이 같은 질량이라면 충돌 후 각각의 X와 Y 운동량은 이전의 두 운동량의 절반에 불과합니다.

같은 속도로가는 두 개의 웜이 거울 인 것처럼이 경우 staitonary 웜은 그들이 함께 스틱 HIST 움직이는 벌레가 반 속도

에서 같은 방향으로 이동하는 경우 그들이 튕겨 충돌 할 경우 이는 웜에서보다 현실적인 움직임을 원한다면 새로운 모멘텀을 단일 세그먼트에 넣은 다음 반동이 나머지 웜에 어떻게 영향을 미치는지 모델링하십시오.

+0

답변 해 주신 Martin 감사합니다! 그리고 네, 그들은 같은 질량을 가지고 있습니다 :-) 당신의 제안을 시험해보고 당신에게 돌아갈 것입니다! 감사! –

+0

Martin, 오늘은 이것을 시도했지만 어떻게해야 할 지 상상하지 못했습니다. 예를 들어 하나의 웜이 빠르게 움직이는 경우 실제로 느린 속도로 두 번째 웜을 통해 수영을 끝냅니다. (비디오 - http://www.box.net/shared/sankz3i7xeenilhzhqfo) 참고, 나는 바디 세그먼트 단위로 탄성 충돌을 시도한다. 두 번째 문제는 두 개의 웜이 충돌 범위 내에 있지만 서로 멀어지면 하나의 웜이 다른 웜보다 속도가 빠르면 다른 웜도 함께 효과적으로 끌어낼 수 있다는 것입니다. –

관련 문제