Обнаружение столкновения Рэй Каст отсутствует - PullRequest
2 голосов
/ 16 мая 2011

Я пишу свой собственный детектор столкновений Ray Cast, и время от времени, как один из миллиона раз (что оказывается довольно частым).Я получаю луч, который просто проскальзывает через промежутки между двумя сторонами многоугольника из-за ошибок точки округления.Это действительно раздражает, и я вообще не знаю, как решить эту проблему.Мало того, но кажется, что создатели Box2D имеют ту же проблему:

Осторожно

Из-за ошибок округления, приведения лучей может проскользнуть черезнебольшие трещины между полигонами в вашей статической среде.Если это неприемлемо для вашего приложения, пожалуйста, немного увеличьте ваши полигоны.

Итак, тем, кто действительно делал это раньше, как мне убедиться, что я никогда не переношу этот тип ошибки округлениясо значениями с плавающей запятой?Какие обходные пути вы использовали, чтобы эта проблема никогда не затрагивала вашу программу?

PS Я много читал о числах с плавающей запятой и до сих пор не могу понять, как заставить проблему из одного на миллион уйти.,Там должно быть что-то, что мне не хватает.

1 Ответ

0 голосов
/ 13 сентября 2011

Это связано с приблизительным характером чисел с плавающей точкой.В этой ситуации многие программисты пытаются сравнить свои вычисленные результаты с желаемым тестом (или, в вашем случае, оценить расстояние между приведенным лучом и полигоном), а затем определить, меньше ли эта разница, чем какое-либо значение эпсилона.ЭТО НЕПРАВИЛЬНЫЙ ПОДХОД.

Я настоятельно советую вам прочитать статью Брюса Доусона о Сравнении чисел с плавающей точкой .Это решение, которое вы ищете.

Кстати, «немного увеличить ваши полигоны» эквивалентно использованию значения epsilon, и не будет работать, если вы не можете гарантировать домен размерови позиции всех полигонов в вашем мире.

...