경계 구체는 아마도 많은 움직이는 물체에서 도움이 될 것입니다. 개체의 반경 제곱을 계산하고 중심에서 추적합니다. 두 객체의 중심 사이의 제곱 거리가 두 객체의 제곱 반경의 합보다 작은 경우 충돌 가능성이 있습니다. 모든 것은 제곱 된 거리로 수행됩니다. 제곱근이 없습니다.
개체 사이의 최소 제곱 거리로 가장 가까운 이웃을 정렬 할 수 있습니다. 물론 충돌 감지는 복잡해질 수 있으며 구형이 아닌 오브젝트의 경우 Bounding Spheres가 반드시 충돌 정보를 얻지는 않지만 충돌을 비교할 때 필요한 개체 트리를 정리할 수 있습니다.
물론 개체의 중심을 추적해야합니다. 이상적으로는 각 오브젝트가 고정 된 구 크기를 다시 계산하지 않아도되기를 원합니다. (특히 재 계산이 특히 어렵지는 않습니다. 특히 각 오브젝트의 경계 영역이 구형 인 트리를 사용하는 경우) 비 강체이지만 복잡 해짐).
기본적으로 데이터 구조에 대한 질문에 대답하기 위해 모든 객체를 마스터 배열에 보관할 수 있습니다. 나는 당신이 직교 좌표를 기반으로 객체를 빠르게 정렬 할 수있는 마스터 배열의 객체에 대한 참조로 구성된 "영역"배열을 가질 것입니다. "영역"배열은 마스터 오브젝트 배열에서 가장 큰 오브젝트 반경의 2 배 이상으로 정의 된 겹침을 가져야합니다 (가능한 경우 객체 경계 구형 대 오브젝트 수는 분명히 나타납니다)
1 회 한 지역 내의 모든 물체의 거리를 서로 비교하여 빠른 충돌 테스트를 수행 할 수 있으며, 다시 말하면 영역 정의가 중요 해지는 곳입니다. 그러나 거리 비교가 간단한 빼기 (및 abs() 연산)로 내려 오기 때문에 조금 더 간단합니다.
물론 비 구형 (non-spherical)의 실제 충돌 감지를 수행해야합니다. 객체가 될 수 있으며 non-t 일 수 있습니다. 그러나 그 시점에서 잠재적 인 비교의 수를 극적으로 줄였습니다.
기본적으로 2 계층 시스템입니다. 첫 번째는 영역 배열이므로 장면에서 거친 정렬을 수행합니다. 둘째, 지역 내 거리 비교가 가능합니다. 충돌 한 객체에 대한 기본 충돌 감지 및 충돌 플래그 지정을 수행 할 것입니다.
다이내믹 영역 결정에서 트리를 사용하여 영역 크기가 균일 해 지도록 영역의 크기가 너무 좁아서 "붐비는"영역이 너무 빠르게 생성되지 않도록하려면 알고리즘의 여지가있을 것입니다. 그 종류의 것은, 그러나, 사소한 것입니다. 왜냐하면 다른 크기의 물체들로, 밀도에 대한 당신의 정렬이 복잡해지기 때문입니다.
영역을 사용하면 충돌 테스트가 조금 더 빨라지고 영역 분할 영역을 사용하면 비교할 수있는 양은 제한되지만이 "영역"을 다시 계산해야한다는 것을 알고 있습니다.이 속도는 느립니까? 빠르게 "영역"을 업데이트 할 수있는 데이터 구조를 찾고 있습니다. – esiegel