Добрый день!
Хочу предложить свой вариант расчета расстояния между планетами внутри системы. За основу взять простейшую радиальную систему координат с центром которой служит звезда данной системы. Планеты вращаются по круговым орбитам:
https://skr.sh/s4p88bpSUEQ
R1 и R2 - радиусы соответствующих планет, (alfa-beta) - угол между этими радиусами
Тогда расстояние L в любой момент времени можно рассчитать по формуле (теорема косинусов):
L = sqrt(R1^2 + R2^2 - 2*R1*R2*cos(alfa-beta))
Угол альфа минус бета рассчитать можно следующим образом:
Пусть t0 - начальное время, парад планет, все планеты находятся на одной прямой.
t - текущее время.
T1 и T2 - периоды планет, за какое время планета совершает полный оборот, если время отрицательное, то планета вращается в другую сторону.
Тогда
alfa-beta = 2*Pi * дробнаячасть((t - t0)/T1 - (t - t0)/Т2)
Это в радианах, если в градусах, то вместо 2*Pi нужно вставить 360
Предложение по расчету расстояния внутри системы
Re: Предложение по расчету расстояния внутри системы
Здравствуйте! У меня недостаточно квалификации, чтобы как-то вам ответить. Но ваше послание я передал более компетентным участникам разработки. В том числе, и ваше предложение о помощи на альфе тоже. Благодарим вас за отзыв. Надеюсь, что с вами скоро попытаются связаться.
Re: Предложение по расчету расстояния внутри системы
Добрый день. Ответ про формулы.
Там все сложнее. Если бы мы считали только тригонометрию, то все было бы просто. Но там динамически все переводится в формулы старой галактики, чтобы время полета примерно соответствовало им. Из-за этого куча нестыковок.
Там все сложнее. Если бы мы считали только тригонометрию, то все было бы просто. Но там динамически все переводится в формулы старой галактики, чтобы время полета примерно соответствовало им. Из-за этого куча нестыковок.
Re: Предложение по расчету расстояния внутри системы
Добрый день!
Смысл понятен, разрешите тогда развить свою мысль:
В старой галактике планеты в системе, да как и сама галактика, были статичны, и время полета в секундах вычислялось по следующей формуле:
Где "количество планет" - целое число, какое кол-во планет необходимо пролететь, модуль разницы координат планет в системе.Внутри системы:
10 + (35.000 / %скорости * ((1.000.000 + (количество планет) * 5.000) / скорость) ^ 1/2)
Предлагаю следующее:
https://skr.sh/s4syqSzK2Z7
Принять минимальное расстояние между двумя соседними планетами или между 0-й планетой и звездой за k(условных астрономических единиц), Тогда
R - радиус орбиты планеты вычислять следующим образом:
R = k*n, где n - номер планеты в системе, начиная с 1 (1, 2, 3 и т.д., т.е. координата планеты + 1).
Тогда формула для нахождения расстояния L из первого поста примет вид (gamma - угол между радиусами планет с номерами n1 и n2):
L = sqrt(R1^2 + R2^2 - 2*R1*R2*cos(gamma)) = sqrt((k*n1)^2 + (k*n)^2 - 2*k*n1*k*n2*cos(gamma)) = sqrt(k^2(n1^2 + n2^2 - 2*n1*n2*cos(gamma))) = k*sqrt(n1^2 + n2^2 - 2*n1*n2*cos(gamma))
L = k*sqrt(n1^2 + n2^2 - 2*n1*n2*cos(gamma))
Получившееся расстояние L подставлять в старую формулу вместо "количество планет".
Предлагаю коэффициент k сделать равным 0,5, тогда среднее время полета будет примерно таким, как и в старой галактике (минимальное - в два раза меньше, максимальное - почти в два раза больше).
Итоговая формула для расчета времени полета внутри системы будет иметь вид:
10 + (35.000 / %скорости * ((1.000.000 + k*sqrt(n1^2 + n2^2 - 2*n1*n2*cos(gamma)) * 5.000) / скорость) ^ 1/2)
или, при k=0,5
10 + (35.000 / %скорости * sqrt((1.000.000 + 2.500 * sqrt(n1^2 + n2^2 - 2*n1*n2*cos(gamma))) / скорость)
Ну и сразу же, для оптимизации, предлагаю рассчитывать косинус дискретно, для каждой угловой секунды. Т.е. предварительно рассчитать в массив 360 значений и дергать значения оттуда
Re: Предложение по расчету расстояния внутри системы
Спасибо за Ваш вклад. Мы прошли через такие расчеты, но в реальности там гораздо больше нюансов в расчетах, сейчас такой подход неприменим на 100% и полеты считаются несколько иначе. Полное 3D, а соответственно и такие расчеты, нами запланировано как следующий шаг, после выхода основной версии игры.