Eu tenho uma figura representada através de uma matriz de bytes (matriz semelhante a bitmap). Exemplo A figura é mostrada no Picture 1
.
O objetivo é encontrar o melhor ângulo de rotação de alguma figura . Quando a Figura é girada pelo melhor ângulo, o retângulo paralelo aos eixos X e Y e inscreve a Figura possui a menor área.
Os retângulos que inscrevem a figura são mostrados em cinza claro nas figuras. No Picture 2
, você pode ver que a rotação ideal da figura é de cerca de 30 graus no sentido horário.
Agora, eu sei algoritmo como encontrar esse ângulo, mas parece-me que é muito ineficiente. É assim:
- Faça um loop pelos ângulos de 0 a 45.
- Para o ângulo atual, para cada ponto da figura, calcule o novo local girado
- Encontre os limites do retângulo que contém a figura (mínimo e máximo x, y) e registre-o se for a melhor correspondência até o momento
- Próximo ângulo
Esse é um tipo de método de força bruta e funciona bem e razoavelmente rápido para as pequenas figuras. No entanto, preciso trabalhar com números que contenham até 10 milhões de pontos e meu algoritmo se torna lento.
Qual seria um bom algoritmo para esse problema?