Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Январь 17, 2012, 19:44



Название: Уменьшить 8-угольник
Отправлено: Igors от Январь 17, 2012, 19:44
Добрый день

Условия задачи похожи на предыдущие http://www.prog.org.ruindex.php?topic=20586.msg140403#msg140403 (http://www.prog.org.ruindex.php?topic=20586.msg140403#msg140403)

На плоскости есть выпуклый 8-угольник с центром в точке (0, 0). Дается точка p внутри 8-угольника.
Задача: уменьшить 8-угольник таким образом чтобы

- точка p лежала на одном из его ребер (или в вершине)
- 8-угольник оставался конвексным (выпуклым)
- "потери площади" от уменьшения были минимальны

Пример: пусть точки 8-угольника лежат "по сторонам света" и точка p находится на "северо-западе". Тогда нужно подтянуть к центру точки: северо-запад,, север и/или запад (но не трогать юг и восток)

Общая задача (зачем это нужно): заполнить поверхность 8-угольниками, которые могут перекрываться но центр одного не лежит внутри другого. Поэтому не требуется строго доказывать что новый 8-угольник "абсолютно оптимальный", нужен инженерный алгоритм который работал бы максимально быстро.

Также не стоит делать предположений что точки 8-углоьника равноудалены от центра, в отдельных случаях расстояния могут отличаться в 5-10 раз

Спасибо