Алгоритм поиска окружения

 

Есть гексагональная решетка, необходимо для заданной ячейки найти

формулу для вычисления окружающих ее ячеек на задонном расстоянии.

Минимальная единица длины - кратное расстояние между центрами гексгонов.

Для понимания сделал рисунок объясняющий суть и принцип нумерации ячеек в решетке.

необходимо по радиусу удаленности (1-9) найти окружающие центральную клетку ячейки.

 

Прикольная задачка, но решать надо исключительно на трезувую голову.

 
Самый простой метод - сделать массивы с координатными поправками на каждый слйчай 1-9, а там и закономерность будет видно и можно сделать вычисление для любого радиуса.
 
Valio >>:

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

Всего будет по ходу два случая -- для четного центра и нечетного. Для нечетного по ходу будет такая же картинка вниз.


 

А при такой номерации ячеек всё встаёт на свои места.

Достаточно ввести половинный индекс ячейки и сразу становится возможным вычисление любых геометрических фигур.

 
Urain писал(а) >>

Достаточно ввести половинный индекс ячейки.

панки в городе ))) ... осталось полуцелые числа для таких индексов изобрести.

 
Valio >>:

панки в городе ))) ... осталось полуцелые числа для таких индексов изобрести.

Как панк панку скажу, что можно еще круче - числа для индексов в нечетных столбцах нехай будут синими, а в четных зелеными)))))

 
Valio >>:

панки в городе ))) ... осталось полуцелые числа для таких индексов изобрести.

Как панк панку скажу,    16/2=8      17/2=8.5     те это разложение на четные и не четные.

Четные строки отвечают за координаты нечётных столбцов,а не четные строки отвечают за координаты чётных столбцов.

Или наоборот по желанию писателя(кодера).

ТЕ возмите и посчитайте через уравнение x^2+y^2=R^2( уравнение окружности) какие двумерные координаты имеют точки окружности и увидите что с округлением до 0.5 эти точки по координатам совпадают с предложеным мной методом кодировки.

PS мы этот методом применяли для расчёта координат перегруз машины для ядерного топлива.

PPS строки округляем до 0.5 столбцы до 1

 

Ну хорошо - без религиозных споров, допустим поделим индекс на четные и нечетные

(условно полуцелые) А далее алгоритм-то какой по новым индексам подразумевается ?

Как к примеру найти все клетки в окресностях заданной ячейки с радиусом 11 или 12 ?

 
Valio >>:

Как к примеру найти все клетки в окресностях заданной ячейки с радиусом 11 или 12 ?

Относительно центра есть шесть вершин. Их координаты вычисляются. Формулы надо искать. Точки связаны прямыми. Формулы тоже надо искать. Все формулы линейные, искать их несложно, но муторно и сравнительно долго, т.к. надо проверять и учитывать все особенности при всех размерах и расположениях, иначе я б уже давно их вывел и отписался.

 
Valio >>:

Ну хорошо - без религиозных споров, допустим поделим индекс на четные и нечетные

(условно полуцелые) А далее алгоритм-то какой по новым индексам подразумевается ?

Как к примеру найти все клетки в окресностях заданной ячейки с радиусом 11 или 12 ?

Блин весь вечер убил, держите скрипт.

Хотя б обьясните зачем это нужно? Если большой секрет можно в личку.

i | [ x : y ]
-------------------------------
0 | [ 10 : 11 ]
1 | [ 11 : 10.5 ]
2 | [ 12 : 10 ]
3 | [ 12 : 9 ]
4 | [ 12 : 8 ]
5 | [ 11 : 7.5 ]
6 | [ 10 : 7 ]
7 | [ 9 : 7.5 ]
8 | [ 8 : 8 ]
9 | [ 8 : 9 ]
10 | [ 8 : 10 ]
11 | [ 9 : 10.5 ]

окружение точки [10:9] по радиусу 2

//                  у нечётных столбцов половинная номерация строк, у чётных целая.

Файлы:
ring_2.mq4  3 kb
Причина обращения: