Мне нужно проверить, сталкивается ли поле с шаром. У меня есть класс BoundingBox, определенный с помощью x, y, z, ширины, высоты, глубины. У меня также есть класс BoundingSphere, определенный с помощью x, y, z, радиуса. Как проверить, пересекаются ли они?Коробка с сферическим столкновением
ответ
Если вы хотите сохранить тест на описанном вами уровне, вы можете поместить ограничительную рамку вокруг сферы, где ширина, высота и глубина = 2r. Конечно, это допускает риск ложных срабатываний для столкновений на «неполярных» или «неэктаторных» точках на сфере. Чтобы решить эту проблему, вы можете подумать о создании ряда иерархических ограничивающих блоков для повышения детализации тестов на попадание в этих проблемных регионах.
Вы также можете обратиться к проблеме с уровня рендеринга. Поскольку вы не можете отображать сферу, обычно используется некая полигональная сетка. Хит-тесты между двумерными (или 3D) полигонами - это простое упражнение.
Nice find, ссылка обновлена и охватывает несколько случаев. твердотельный алгоритм с твердой сферой - это то, что я видел в большинстве игровых движков (в различных оптимизированных формах). – Kaganar
Вам нужно просто проверить все углы ограничительной рамки на расстоянии от центра сферы. Вот некоторые псевдокод:
bool collidesWith(BoundingBox b, BoundingSphere s) {
for(Vertex v in b) {
if(distanceBetween(v, s.center) <= s.radius)
return true;
}
return false;
}
Это не относится к случаю, когда пересекается только одна из сторон. – corsiKa
А хорошая точка - спасибо. –
Это довольно атипично иметь вершины вокруг ориентированных по оси ограничительных прямоугольников, о которых просит ОП. Что еще более важно, «просто» не работает (как уже указывалось), а также слишком медленно для этого случая. – Dude
Первое, что нужно проверить, является ли BoundingBox для BoundingSphere пересекается. Причина этого в том, что это очень простой способ исключить более сложную математику.
Следующим шагом будет взять каждую из шести плоскостей (или двенадцать треугольников) ограничительной рамки и выполнить расстояние от точки до полигона над ними до центра сферы. Если один из них меньше радиуса сферы, то у вас есть удар.
Matlab код многоугольник-точка расстояния: http://www.mathworks.com/matlabcentral/fileexchange/12744-distance-from-a-point-to-polygon
Там глава, в Graphics Gems Джим Arvo.
Я думаю, что устаревшая ссылка выше использовалась для указания на его код, так как в URL есть «arvo». Это link работает - по крайней мере, прямо сейчас.
- 1. UIDynamics - проблема с столкновением
- 2. Проблема с столкновением C++
- 3. Проблемы с столкновением Flashpunk
- 4. быстрое перетаскивание с столкновением
- 5. проблемы с столкновением с EaselJS
- 6. Проблемы с столкновением с баллом
- 7. Проблемы с столкновением с играми
- 8. AtrributeError с базовым столкновением спрайтов
- 9. Прыжки с гравитацией и столкновением
- 10. Pygame hitbox проблемы с столкновением
- 11. холст скроллинг с столкновением обнаруживая
- 12. Управление столкновением в winforms
- 13. Проблема с столкновением на Java (с прямоугольниками)
- 14. Проблемы с столкновением с алегро-понгом
- 15. Проблемы с столкновением мячей с понгами
- 16. Проблемы с контактом/столкновением в spritekit
- 17. Как справиться с столкновением после его обнаружения
- 18. Проблема с пиксельным столкновением в C#
- 19. Странное поведение с столкновением платформы и прыжками
- 20. Three.js: Как нарисовать сферу с сферическим треугольником на ее поверхности?
- 21. Распределенное управление столкновением postgresql ID
- 22. Показывать теги объектов перед столкновением
- 23. Коробка с комбинированной коробкой
- 24. Коробка с изображением
- 25. +/- Коробка с детьми
- 26. коробка с ggplot2
- 27. Коробка с внутренней кривой
- 28. Скользящая коробка с надписью
- 29. Ограничительная Коробка с PCA
- 30. Ограничительная коробка с spritebatchnode
Возможный дубликат: http://stackoverflow.com/questions/4578967/cube-sphere-intersection-test (хотя предмет там говорит «куб», ответ применяется ко всем выровненным по осям полям). –