Правила

Новые идеи рассматриваются администрацией и могут быть приняты в разработку после обсуждения в Сенате, Конгрессе или ВМС.
9

Изменение системы расстояний., Труъ идея.

Сообщение  Сообщение #80 
Группа guest
Итак, помнится мне уже писал я такие предложение в какой-то теме, месяца 4 назад, но найти не могу, потому, походу, прийдется с нуля писать.

Итак, для начала приведу текущее положение дел:
Минимальное расстояние 3000. Расстояние между планетами 50. Расстояние между системами 500. Расстояние между рукавами 2000.

Теперь что я предлагаю.
Во-первых - закольцевать рукава - расстояние из 1:1 в 1:999 сделать равным 500 (как между соседними системами) и т.п., думаю все поняли что я имею ввиду.
Выглядеть это будет так:
Изменение системы расстояний.







































Пусть точка B - система 1:1 например, тогда точка K - примерно 1:200, точка С - 1:500, точка L - примерно 1:750. Точка A - 2:1, точка N - примерно 2:200 и т.д.. Кроме того, ОЧЕНЬ рядом с точкой B находится система 1:999 (а именно чуть ниже и левее, если смотреть на рисунок).

Это предложение довольно логично, и решит проблему очень большого расстояния между 1:100 и 1:900, например.

Во-вторых. Это самое интересное. Предлагаю сделать возможным пролетать не по линии окружности, то-есть пролетая все системы между системой отправления и системой назначения, а внутри окружности. На рисунке выше - имеется ввиду возможность перелета из L в K по прямой LK, или, например, из B в C по почти (почему почти, объясню позже) диаметру BC.
Основываться эта новая система расстояний будет на текущих. Как вы понимаете, для начала нужно рассчитать диаметр этой окружности. Включив мозг, мы понимаем, что для системы 1:1 диаметрально противоположной является "как-бы система" 1:500,5, а не 1:500, как можно было-бы подумать. Тогда расстояние до этой "как-бы системы" равно диаметру, который нам надо посчитать.

Итак. В текущей системе расстояний расстояние от 1:1 до 1:500,5 по линии окружности равно 499,5*500 = 249750. (Тут, кстати, еще заметим, для итоговой формулы, что длинна полуокружности - 499,5 расстояний между системами)
Из геометрических соображений диаметр данной окружности в пи/2 раз меньше расстояния по окружности, то-есть он составляет 249750/(пи/2) ~= 158995,788. Радиус равен половине диаметра: R = 158995,788/2 = 79497,894.
Данную величину (при вводе данной идеи, разумеется, можно данную величину округлить до 79500) будем считать "константой радиуса рукава". Все расчеты будут зависеть от нее, и, соответственно, при каком-либо изменении баланса будет писаться не "расстояние между системами уменьшено с 500 до 400", а "радиус рукава уменьшен с 79500 до 63600". Хотя для игроков, конечно, понятнее будет формулировка "уменьшен на 20%", которую и следует использовать.

Все, основная идея высказана, теперь займемся проблемой расчета расстояний между различными системами, для этого обратимся к формуле зависимости длинны хорды от центрального угла, опирающегося на эту хорду:
L=2* R * sin(a/2);
где L - искомое расстояние между системами (хорда окружности), R - радиус рукава, a - центральный угол, опирающийся на искомую хорду. Последнюю величину мы так-же не знаем, вот ее формула (обычные очевидные соображения):
a = ( пи / 499,5 ) * Δ;
где a - искомый угол, пи ~= 3,14, Δ - разница систем по линии окружности. Последняя величина требует пояснения, мне сложно объяснить ее смысл в теории, я воспользуюсь приведением примеров:
разница систем по линии окружности (далее Δ) от системы 1:1 до системы 1:5 равна 4;
Δ от системы 1:200 до системы 1:300 равна 100;
Δ от системы 1:1 до системы 1:500 равна 499...
И вот тут мы сталкиваемся с проблемой - ведь по первому пункту данной идеи Δ от системы 1:1 до системы 1:999 равна 1 (а до системы, например, 1:950, она равна 50). Для того, что-бы посчитать такую сложную переменную, нашим дорогим разработчикам придется ужас! сооружать в коде конструкцию вида if (?) then (...) else (...). Это, несомненно, непосильный труд, потому постараемся упростить предыдущие две формулы путем вложения второй в первую, авось что-нибудь прояснится:

L=2* R * sin( ( пи/499,5 ) * Δ/2);
L=2* R * sin( пи / (999/Δ) );
Итак, путем равносильных преобразований (Δ ≠ 0) мы пришли к выводу - аргументом синуса является отношение (пи) к (999/Δ). И что мы видим - из-за того, что функция синуса такая прекрасная зеркально ведет себя что при увеличении аргумента с 0 до (пи/2), что при уменьшении с (пи) до (пи/2), мы можем переменную Δ рассчитывать просто как модуль разности между системами! То-есть для нас вообще не важно Δ = 1 или Δ = 998, результат будет одинаков (так-же неважно, Δ = 949 или Δ = 50, и т.п.).
Итак, как мы поняли,
Δ = |S1 - S2|;
где S1 - система отправления, S2 - система назначения, | | - знак модуля.
И итоговая формула принимает вид:
L=2* R * sin( пи / (999/ |S1 - S2| ) );
Все!
Теперь обобщу - я предлагаю заменить текущую формулу расстояний между системами, которая выглядит так:
L = |S1 - S2| * 500;
на, по моему мнению, лучшую формулу:
L = 2* R * sin( пи / (999/ |S1 - S2| ) );
где R ~= 79500 (точнее 79497,894 , но лучше округлить при вводе, можно даже до 80000, там разница копеечная) .
Теперь немного графиков, они красиво показывают, зачем все это надо (на графике R ~= 79497,894):
Изменение системы расстояний.













































Я еще раз подчеркну, что сильное различие в правой части графика обусловлено лишь закольцовыванием рукавов, а так разница, в действительности, не высока. Однако закольцовывание - несомненно нужное нововведение, этого баланс просто требует. Цель графика - дать понять, что кроме закольцовывания нужно и изменить формулу расстояний между системами (я замечу, что по-сути ВОООБЩЕ КОД МЕНЯТЬ НЕ НАДО. Просто в одном месте отредактировать формулу (как я себе представляю), может в 2-3 местах. Главная переменная (модуль разницы систем) остается той-же. R - не переменная, а константа.
Кроме того, график дает понять, что пока разница между системами отправления и назначения меньше 200 - разницы в расстоянии вообще особо не будет. Зато при полете в диаметрально противоположную точку рукава формула существенно (в (пи/2) ~= 1,57 раз) уменьшит расстояние, что очень логично.

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

Забыл добавить - расстояния в другие рукава будут как и раньше считаться по Пифагору, ничего нового.

И без флуда, позязя)

Upd: если ВДРУГ в текущем коде Δ = |S1 - S2| может быть равно нулю - можно перевернуть дробь внутри синуса, для того что-бы не возникала ошибка "деления на ноль". А именно для этого случая формула принимает вид:
L=2* R * sin( пи * |S1 - S2| / 999 );
тогда синус равен нулю, и разница систем, что логично, так-же равна нулю (при S1 = S2, я просто не знаю как у вас там в коде реализован рассчет расстояний).
Upd2: чуть подредактировал в одном месте, по-сути ничего не изменилось. (23:00 мск).

Upd3:
1) Я не против что-бы просто ввели закольцованность, не вводя второй пункт данной идеи!
2) И еще, тут были вопросы по поводу работы Алл.Сетей. Я, кажется, придумал как это реализовать.
Территория альянса будет представлять из себя сектора круга - центр сектора в центре рукава, а прямые, являющиеся границами сектора, приходят из центра рукава в границы Территории на окружности.
Масштабирование этой системы на цилиндр не сложно.
В рассчетах Алл.Сети ничего не изменится - просто "представлять" Алл.Сеть можно будет не как "территорию на 2-мерной поверхности" а как "набор секторов круга в 3-мерном пространстве". Очень красиво, если представить. И, кстати, очень логично выглядит. Да, вообще супер! Пойду Васе скину в личку, и добавлю в шапку.
Картинка:
Изменение системы расстояний.




Тут сектор ABO - территория альянса в 1 галактике (то-есть на дуге AB все системы принадлежат альянсу), а сектор A1B1O1 - территория альянса во 2 галактике. Если во 2 галактике территория альянса меньше, то прямые AA1 и BB1 будут сужаться к плоскости 2 галактики. Красиво? Вроде очень. И логично же!
И трехмерная вселенная!




Upd4:
http://xcraft.ru/forum/topic_15520/4#post-412179 Хорошая картинка, объясняющая территорию Альянсовой Сети.
3 Июля 2014 22:48:58
3 Июля 2014 22:48:58
Сообщение  Сообщение #81 
Группа guest
Автора идеи в Разрабы!!!! Идея зачетная! + в репку!!!!
7 Февраля 2015 03:07:23
7 Февраля 2015 03:07:23
Сообщение  Сообщение #82 
Группа guest
красиво,но страшно что получится при введении) :wink:
7 Февраля 2015 03:22:36
7 Февраля 2015 03:22:36
Сообщение  Сообщение #83 
Репутация 64
Группа xerj 96 21 35 Сообщений 462
:bully: было б круто . но расчет над чуток изменить
7 Февраля 2015 03:25:54
7 Февраля 2015 03:25:54
Сообщение  Сообщение #84 
Репутация 43
Группа xerj Альянс Inglourious Basterds 82 15 26 Очков 2 089 443 Сообщений 921
АП. Темы .

Отличный способ избавиться от геморойного переноса + добавить интерес полета .

ИМХО: все рукова которые за 1000 оставить текущию концепцию игры.
31 Июля 2015 21:06:41
31 Июля 2015 21:06:41

Информация

Вы не авторизованы

1 чел. читают эту тему (гостей: 1)

Пользователей: 0

Космическая онлайн стратегия Xcraft это бесплатная игра для алигархов. Пример боя >> Регистрация >> И космос весь ваш на тысячи лет...

2009 — 2524