User Tools

Site Tools


kg:doc_disdocext_space

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

kg:doc_disdocext_space [2012/04/04 12:10] (current)
Line 1: Line 1:
 +====== Пространство,​ время (общий раздел) ======
  
 +
 +===== Пространство =====
 +
 +==== Размеры карты =====
 +Сейчас базовый размер карты выбран как 1024*1024. Физически карта больше,​ так как наша "​хексовая"​ карта, что бы быть эффективной и простой искажена,​ подробнее об этом можно прочитать (и посмотреть картинки) тут: http://​wiki.ioupg.com/​kg:​doc_discoc_universe
 +
 +Физический размер,​ и допустимые индексы для карта таковы:​ 1536х1024. От этой прямоугольной области отрезано два угла (использовать их нельзя),​ то есть любой вертекс в этих углах физически существует,​ но размещение там игровых объектов недопустимо.
 +
 +Ниже иллюстрация из спецификации карт:
 +{{ :​kg:​landscape_rects.jpg| }}
 +Здесь видно, какие именно углы карты не используются.
 +
 +
 +==== Устройство карты ====
 +=== Вертекс ===
 +Точка карты, с которой сопоставлена определённая информация:​ тип местности,​ высота,​ модификаторы (снег, трава, выжжено). Положение любых объектов на карте задаётся в вертексах,​ нахождение этих объектов между вертексами недопустимо. Некоторые объекты могут передвигаться по карте с точностью выше чем вертекс,​ отображение этих объектов допустимо с попиксельной точностью,​ однако это лишь визуальный эффект. И такое "​межвертексное"​ перемещение всегда происходит между соседними вертексами карты. То есть из каждого вертекса такой объект может двигаться лишь в шести направлениях.
 +  * вертекс это точка, то есть имеет позицию,​ но не имеет площади.
 +  * расстояния между соседними вертексами всегда равны
 +  * отображения объектов могут смещаться относительно вертекса,​ но логике игры мы всегда пренебрегаем этим и считаем,​ то позиция объекта **всегда** определяется вертексом.
 +  * топология вертексов является равномерной сеткой со связностью 6, расстояния между соседними вертексами тождественны.
 +  * номер вертекса в массиве называется индексом,​ это двумерная целочисленная величина.
 +  * координаты вертекса в мире строго зависят от индекса вертекса,​ преобразование имеет примерный вид:
 +    * x = x*n - y*m/2
 +    * y = y*m
 +  * из связности (6) в пространстве вертексов следует весьма нетривиальная метрика,​ где расстояние
 +    * d = max( |x|, |y|, |x-y| )
 +  * для вычисления позиции вертекса на экране необходимо знать не только индекс вертекса,​ но и высоту ландшафта в этом вертексе (она там и хранится)
 +=== Вертексная сетка ===
 +Набор линий, соединяющих соседние вертексы. Вертексная сетка карты имеет вид множества равносторонних (идеальных) треугольников. Направления линий в сетке могут быть горизонтальными,​ а вертикальными быть не могут - особенности хексовой метрики. Все подвижные объекты карты передвигаются исключительно по вертексной сетке, и последовательно проходят все узлы. Двигаться можно только между соседними вертексами.
 +
 +=== Хекс ===
 +Шестиугольный фрагмент карты, имеющий центр в "​центральном"​ вертексе,​ и опирающийся на 6 дополнительных вертексов,​ являющихся соседями к центральному. Фрагмент считается хексом,​ если удовлетворяет условиям:​
 +  * центральный вертекс удовлетворяет условию (x+y)%3 == 2.
 +  * все дополнительные вертексы хекса попадают в рабочую область карты
 +Для карты с ребром D количество вертексов составляет чуть меньше чем D*D/3, тандартная карта с диаметром 1024 имеет около 300 тысяч хексов. Хексы являются не сущностью карты, а лишь наброшенной поверх неё сеткой,​ облегчающей ориентирование и формулировку некоторых правил,​ ограничивающих нахождение на карте различных объектов. Хексы **не используются** для задания местоположения объектов на карте, для этого лучше обратиться к вертексам. Свойства хексов таковы:​
 +  * У каждого хекса есть 6 соседних (исключая края карты),​ с которыми он соприкасается гранями
 +  * направления между центрами соседних хексов не совпадают с вертексной сеткой. Потому некорректно рассматривать движение объектов как движение между хексами. Для этого у нас есть вертексы.
 +  * Каждый крайний вертекс хекса (исключая края карты) является крайним вертексом ещё для двух соседних хексов. Потому говорить о принадлежности какого-либо вертекса какому либо хексу некорректно.
 +
 +=== Проходимость (вертекса) ===
 +Вертекс,​ в зависимости от своих данных,​ считается //​проходимым//​ или //​непроходимым//​. Проходимость вертекса используется как для движения армий, так и для определения - можно строить (тут) домик, или нет. Точка считается проходимой,​ если:
 +  * отсутствует непроходимый декоратор
 +  * высота больше нуля
 +
 +=== Ребро ===
 +Пара смежных вертексов соединяется ребром,​ это нужно для графа проходимости (оттуда и термин). Для каждого вертекса существует шесть соседей,​ и значит шесть рёбер, исключение - крайние вертексы карты, где соседи могут банально выходить за её границу. Непроходимость хотя бы одного вертекса делает ребро непроходимым,​ но даже если оба вертекса проходимые,​ ребро при этом может быть всё равно непроходимым,​ так как там имеются дополнительные условия. Вот полная формулировка проходимости ребра:
 +  * оба вертекса проходимы
 +  * разница высот не больше 3
 +
 +=== Заблокированность (вертекса) ===
 +Проходимый вертекс может быть тем не менее непроходим,​ потому что на нём, например,​ находится вражеская армия. В отличие от простого определения //​проходимости//,​ //​заблокированность//​ вертекса зависит не только от ландшафта,​ но и от большого числа других факторов. Однако любой непроходимый вертекс автоматически считается заблокированным.
 +
 +=== Глобальная достижимость (вертекса) ===
 +В карте должна существовать хотя бы одна крупная связная проходимая область. Могут встречаться и изолированные от этой основной области куски карты, например,​ ограниченные горами,​ и для некоторых задач использование этих областей ограничено. Если существует путь, по которому из вертекса (А) можно попасть в основную область,​ считаем (А) //"​глобально достижимой"//​
kg/doc_disdocext_space.txt · Last modified: 2012/04/04 12:10 (external edit)