Мне кажется, что всё несколько проще. Перед нами, по сути, задача минимизации периодической функции одной переменной.
Да, но у неё очень много локальных минимумов.... (

, вообще говоря).
Для квадратов евклидова расстояния ситуация сложнее
Нам не надо сложнее
-- 26.10.2015, 00:48 --Да, после того как вы выбрали отображение из точек в ячейки, надо оптимизировать некую функцию поворачивая ячейки.
Ну, это вроде бы просто, - средний угол точек, средний угол "занятых" ячеек - их разность и даёт "оптимальный поворот"...
-- 26.10.2015, 01:08 --Пока нашёл такое "приближение к решению"...
Упорядочим точки по углу и найдём разницу между соседними (

разниц). Перенумеруем эти "промежутки" по убыванию (

).
Пусть

- кол-во (пустых) ячеек, которые нам нужно "добавить".
Первую ячейку добавляем в наибольший промежуток (

).
Для второй ячейки смотрим что больше -

или

. Где больше, туда и добавляем.... Далее - "аналогично" (могу привести код в C++ или MatLab).
Не знаю только является ли это решением.