Ho una figura rappresentata attraverso una matrice di byte (matrice bitmap-like). Esempio La figura è mostrata sul Picture 1
.
L'obiettivo è trovare il miglior angolo di rotazione di una determinata figura . Quando la figura viene ruotata secondo l'angolo migliore, il rettangolo che è parallelo agli assi X e Y e indica la figura ha l'area più piccola.
I rettangoli che segnano la figura sono mostrati in grigio chiaro sulle immagini. Nel Picture 2
, puoi vedere che la rotazione ideale della Figura è di circa 30 gradi in senso orario.
Ora conosco l'algoritmo come trovare questo angolo, ma mi sembra molto inefficiente. Va così:
- Passa attraverso gli angoli da 0 a 45.
- Per l'angolo corrente, per ogni punto della figura calcolare la posizione nuova, ruotata
- Trova i limiti del rettangolo che contiene figure (minimo e massimo x, y) e registralo se è la migliore corrispondenza finora
- Angolo successivo
Questo è un tipo di metodo della forza bruta e funziona bene e ragionevolmente veloce per le piccole figure. Tuttavia, devo lavorare con cifre che contengono fino a 10 milioni di punti e il mio algoritmo diventa lento.
Quale sarebbe un buon algoritmo per questo problema?