Как нарисовать контур зоны шестиугольника, как в Civ 5

Я пытаюсь получить вид контура шестиугольника, который вы найдете в Civilization V:

http://blogs.forbes.com/davidewalt/files/2010/09/civ5_screenshot.jpg

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

Граничные плитки

Предположим, что список граничных плит в случайном порядке. Я также могу получить список всех углов на каждом гексе. Как вы можете видеть выше, остров посередине будет создавать отверстие в форме контура, Civ 5 также, похоже, прекрасно справляется с этими отверстиями:

введите описание изображения здесь>> </p></body></html>

5 голосов | спросил Perky 17 12014vEurope/Moscow11bEurope/MoscowMon, 17 Nov 2014 18:30:11 +0300 2014, 18:30:11

2 ответа


5

Логика проста: ваш контур представляет собой набор всех ребер, которые отделяют граничные плитки от неграничных плит. Вы можете запрограммировать следующее:

for each boundary tile
    for each edge
        if edge is shared with a hex tile that is NOT in the boundary tile list
            mark as contour edge
render all contour edges

Обратите внимание, что если вы хотите, чтобы контур охватывал всю зеленую зону, а не только граничные плитки, тогда условие становится «если ребро разделено шестнадцатеричной плиткой, которая НЕ находится в списке зеленых плит», а внешняя для цикла становится «для каждой плитки в зеленом списке»

ответил Babis 17 12014vEurope/Moscow11bEurope/MoscowMon, 17 Nov 2014 18:49:28 +0300 2014, 18:49:28
0

Есть ли у вас граничная связь? Если это так, выберите край, который, как вы знаете, находится на границе и добавьте в свой список. Работая в согласованном порядке намотки (по часовой стрелке или против часовой стрелки), выберите вершину этого эссе. Посмотрите на все соседние грани, которые разделяют эту вершину. Если край находится на границе, пройдите вниз и добавьте в свой список. Промыть и повторить. В конце концов вы вернетесь к исходному краю. Теперь контур завершен.

Для этого вам понадобится dat на вершинах и какие грани их разделяют. Когда вы пересекаете некоторые ребра, вы будете на одной плитке, а некоторые возьмут вас на плитки neigjbourinf. В конце вы имеете полилинию в порядке границы, которая позволит вам сгладить ее, как это делает civ.

ответил Steven 17 12014vEurope/Moscow11bEurope/MoscowMon, 17 Nov 2014 20:01:31 +0300 2014, 20:01:31

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132