Типы данных для физики

Вам придется переопределить функцию equals (вместе с другими), чтобы использовать ее с пользовательскими классами.

Метод equals сравнивает объекты.

Двоичный оператор == сравнивает адреса памяти.

10
задан Scottie T 24 February 2009 в 18:23
поделиться

8 ответов

В .NET a decimal будет самый точный тип данных, который Вы могли использовать для положения. Я просто записал бы класс для положения:

public class Position
{
    decimal x;
    decimal y;
    decimal z;
}

Что касается времени, Ваш процессор не может дать Вам ничего меньшего, чем одна галочка.

Походит на забавный проект!Удачи!

9
ответ дан 3 December 2019 в 16:12
поделиться

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

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

5
ответ дан 3 December 2019 в 16:12
поделиться

Я использовал бы Векторный тип данных. Точно так же, как в Физике, когда Вы хотите смоделировать перемещение объектов, Вы используете векторы. Используйте Vector2 или класс Vector3 из платформы XNA или структуры самокрутки Vector3 для представления положения. Vector2 для 2D, и Vector3 3D.

Структура TimeSpan или класс Секундомера будут Вашими наилучшими вариантами для вычисления изменения вовремя. Если бы я должен был рекомендовать, то я использовал бы Секундомер.

3
ответ дан 3 December 2019 в 16:12
поделиться

Тип данных decimal, хотя точный не мог бы быть оптимальным выбором в зависимости от того, что Вы хотите сделать. Обычно Direct3D и GPU используют 32-разрядные плавания и векторы 3 (общие 96 битов) для представления положения в x, y, z.

Это будет обычно давать более чем достаточно точности, если Вы не должны будете смешивать и огромный масштаб (планеты) и микроскопический уровень (баскетболы) в том же "мире".

Причинами того, что не использовались Десятичные числа мог быть размер (4 x больших), скорость (порядки величины медленнее) и никакие тригонометрические функции, доступные (AFAIK).

В Windows API-функция QueryPerformanceCounter даст Вам часы с самым высоким разрешением и QueryPerformanceFrequency частота счетчика. Я полагаю, что Секундомер, описанный в других комментариях, переносит это в класс .NET.

9
ответ дан 3 December 2019 в 16:12
поделиться

Я думаю, что необходимо смочь сойти с рук Тип данных decimal без проблемы. Это имеет большую часть доступной точности. Однако двойной тип данных должен быть очень хорошо.

Да, галочка является самой маленькой, я знаю (использование Системы. Диагностика. Класс секундомера).

0
ответ дан 3 December 2019 в 16:12
поделиться

Я не уверен, что понимаю Ваш последний вопрос, Вы могли разъясниться?

Править:

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

Галочка является лучшей точностью, которой можно достигнуть при измерении времени с машиной.

0
ответ дан 3 December 2019 в 16:12
поделиться

Для моделирования Вы - вероятно, более обеспеченное использование десятичного/двойного (тот же тип как положение) в течение безразмерного времени, затем преобразовывая его из чего-то значимого на вводе/выводе. Иначе Вы будете выполнять тонну операций броска, когда Вы переместите вещи. Вы получите произвольную точность этот путь также, потому что можно выбрать масштаб времени, чтобы быть столь большими/маленькими, как Вы хотите.

0
ответ дан 3 December 2019 в 16:12
поделиться

Эй Juan, я рекомендовал бы использовать класс Vector3, как предложили несколько других, так как это просто в использовании, и прежде всего - поддерживает все операции, в которых Вы нуждаетесь (как дополнение, умножение, умножение матриц и т.д....) без потребности реализовать его сами. Если у Вас есть сомнение относительно того, как продолжить двигаться - наследовали его, и на более позднем этапе можно всегда изменять внутреннюю реализацию или разъединяться от vector3.

Кроме того, не используйте ничего менее точного, чем плавание - все процессоры в эти дни работают достаточно быстро, чтобы быть более точными, чем целые числа (если оно не предназначено для мобильного телефона, но даже там...) Используя меньше, чем плавание, Вы потеряли бы точность очень быстро и закончили бы с нервными вращениями и переводами, особенно если Вы планируете использовать больше, чем единственное умножение матрицы/кватерниона.

0
ответ дан 3 December 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: