Хорошо, мне очень стыдно за то, что я спрашивал об этом, особенно когда я действительно изучаю физику, но есть что-то, что беспокоит меня в моделировании, над которым я работаю.
Я воссоздаю солнечную систему в симуляции n тел, которую я запрограммировал ранее. И у меня проблема с уменьшением солнечных данных. Таким образом, даже если я использую килограммы и километры для метрических единиц, значения намного больше, чем переменные могут храниться в программировании. Также, как некоторые из вас знают, чем больше значение, тем больше ошибка с плавающей запятой. (шум ошибки в данных) Также это замедляет обработку.
Я решил уменьшить масштаб данных с помощью контрольной точки, и для этого я взял радиус Земли за 1 единицу. И уменьшал каждое другое расстояние и радиус в соответствии с ним. (Для ясности единица равна 6371 км.)
Но я не уверен, стоит ли мне уменьшать массу или нет. Мой здравый смысл подсказывает, что я должен уменьшить массу, чтобы плотность каждого тела оставалась неизменной. Поэтому я взял плотность и рассчитал новое значение массы для каждого тела с новым уменьшенным радиусом. Но я как-то не мог убедить себя, правда это или нет. Вот я и обращаюсь к вам :) Должен ли я также уменьшить массу?
PS.1: я использовал с помощью уравнение для расчетов как обычно. (Повторяя его через каждую пару тел)
Если есть другие программисты, такие как я, заинтересованные в создании подобной симуляции, как вы решили эту проблему с размером данных? Есть ли лучшие решения, чем уменьшение значений?
PS. Я создал файл excel, который выполняет преобразование масштаба. Поэтому я делюсь листом в OneDrive. ( http://1drv.ms/1NIekGo ) Если вы можете проверить мои расчеты и значения, это также будет очень полезно для меня. Спасибо за любую помощь.
Как упомянул Баррикартер в своем комментарии, вам следует больше заботиться о единицах измерения, а не о масштабе.
Как правило, лучше придерживаться общепринятых единиц измерения, которые люди узнают. (Это поможет вам держать голову прямо и другим будет легче просматривать вашу работу.) В астрономии они немного отличаются от стандартных единиц СИ, поскольку вещи, скажем так , большие , и числа выходят из-под контроля. быстро (как вы заметили). Вот некоторые единицы измерения, предлагаемые на странице Википедии астрономической системы единиц :
Если вы придерживаетесь этих единиц, вы сможете ограничить ошибку из-за округления и уменьшить вычислительную нагрузку больших чисел.
Рассмотрим почти круговую орбиту. В среднем, , а сила тяжести уравновешивает центробежную силу:
Я запрограммировал один сам некоторое время назад. Я использовал полные единицы СИ в сочетании с удвоениями (64-битные числа с плавающей запятой). Они отлично подходят для масштабов нашей Солнечной системы и по-прежнему чрезвычайно точны.
var sun = new Star();
sun.Position = new Vector3D(0,0,0);
sun.Velocity = new Vector3D(0,0,0);
sun.Mass = 1.998855e30;
var earth = new Planet();
earth.Mass = 5.9722e24;
earth.Position = new Vector3D(0, 149.6e9, 0);
earth.Velocity = new Vector3D(29780,0,0);
system.World.Objects.Add(sun);
system.World.Objects.Add(earth);
Если вам интересно, мой код для этой симуляции находится на github: https://github.com/RononDex/Simulation
Сама симуляция находится в подпапкеSimulation.Testing
пользователь21
ОлдБеркай
Гипносифл