У мене є Фігура, представлена через матрицю байтів (матриця, схожа на бітмап). Приклад Малюнок показаний на Picture 1
.
Мета полягає в тому, щоб знайти найкращий кут повороту деякої заданої Фігури . Коли Фігура повертається на кращий кут, прямокутник, який паралельний осям X і Y і вписує рисунок, має найменшу площу.
Прямокутники, що вписують фігуру, на малюнках зображені як світло-сірі. На екрані Picture 2
ви бачите, що ідеальне обертання Фігури становить приблизно 30 градусів за годинниковою стрілкою.
Тепер я знаю алгоритм, як знайти цей кут, але мені здається, це дуже неефективно. Виходить так:
- Проведіть через кути від 0 до 45.
- Для поточного кута для кожної точки фігури обчисліть нове, повернене місце розташування
- Знайдіть межі прямокутника, що містить фігуру (мінімум та максимум x, y), і зареєструйте її, якщо це найкраще відповідність досі
- Наступний кут
Це своєрідний метод грубої сили і добре і досить швидко справляється з дрібними фігурами. Однак мені потрібно працювати з фігурами, які містять до 10 мільйонів балів, і мій алгоритм стає повільним.
Який був би гарний алгоритм цієї проблеми?