J'ai une figure représentée par une matrice d'octets (matrice de type bitmap). La figure d' exemple est montrée sur le Picture 1
.
Le but est de trouver le meilleur angle de rotation d'une figure donnée . Lorsque la figure pivote selon le meilleur angle, le rectangle qui est parallèle aux axes X et Y et inscrit la figure a la plus petite surface.
Les rectangles qui inscrivent la figure sont gris clair sur les images. Dans le Picture 2
, vous pouvez voir que la rotation idéale de la figure est d'environ 30 degrés dans le sens des aiguilles d'une montre.
Maintenant, je sais par algorithme comment trouver cet angle, mais il me semble que c'est très inefficace. Ça va comme ça:
- Boucle à travers des angles de 0 à 45.
- Pour l'angle actuel, pour chaque point de la figure, calculer un nouvel emplacement pivoté
- Trouver les limites du rectangle contenant le chiffre (minimum et maximum x, y) et l'enregistrer si c'est la meilleure correspondance jusqu'à présent
- Angle suivant
C'est une sorte de méthode de force brute qui fonctionne bien et assez rapidement pour les petites figures. Cependant, je dois travailler avec des chiffres qui contiennent jusqu'à 10 millions de points, et mon algorithme devient lent.
Quel serait un bon algorithme pour ce problème?