Может ли использование Bullet3D для 2D вызвать только числовую ошибку с плавающей точкой по оси Z? - PullRequest
1 голос
/ 13 марта 2011

Я думаю, что возможно использовать bullet3D только в 2D-режиме, но я имею в виду ошибку точности с плавающей точкой. Если все значения и операции для оси Z равны 0, на значения Z могут влиять операции для другой оси. Если это накопилось, результат может быть неправильным.

Однако я еще не использовал bullet3d. Если вы имели дело с bullet3d в режиме 2D only, пожалуйста, дайте мне знать ваше мнение.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Я сейчас использую Bullet Physics для 2D-игры, она работает просто отлично.Bullet предоставляет метод btRigidBody :: setLinearFactor, который позволяет принудительно установить положение оси Z равным 0, несмотря ни на что.Вы даже можете смешивать 2D и 3D, устанавливая линейный коэффициент только для объектов, которые вы хотите ограничить плоскостью.

При этом я использую фигуру с некоторой глубиной оси Z (ограничено только ее положениев 2D) так что это не 0 толщина.И даже в этом случае, потому что он тонкий, у меня иногда возникают проблемы, когда он проскальзывает сквозь сетки, чего не должно быть.Вы можете использовать setMargin для борьбы с этим.

0 голосов
/ 13 марта 2011

Я не знаю конкретно о Bullet, но при условии, что это достаточно хорошо написанная библиотека, это не будет проблемой.

Арифметика с плавающей точкой не является мистикой. Ошибка округления не возникает магическим образом, равно как и случайное округление, нечеткое или любое из многих других терминов, которые люди используют для описания явлений, которые они не понимают.

Арифметика с плавающей запятой является детерминированной, как и все остальное на компьютере (за исключением случайного отражения космических лучей битами). Вычисления с точными нулями, правильно сформулированные, дают результаты с нулевым результатом. Если верно, что все операции, которые влияют на ось Z, являются нулями, то результирующая координата Z будет точно нулевой . Если это не так, то используемый алгоритм не подходит, и я бы не стал доверять ему ни при каких расчетах.

Место, где вы могли бы столкнуться с неприятностями, было бы, если бы вы суммировали величины с ненулевыми компонентами Z, которые физически должны были бы суммироваться до нуля; в такой ситуации ошибка округления может накапливаться, приводя к небольшому, но ненулевому Z-компоненту. Однако это не похоже на ситуацию, в которой вы оказались. Похоже, что все задействованные величины должны иметь нулевые Z-компоненты, и это будет сохранено.

...