Saya memiliki Gambar diwakili melalui matriks byte (bitmap-like matrix). Contoh Gambar ditunjukkan pada Picture 1
.
Tujuannya adalah untuk menemukan sudut rotasi terbaik dari beberapa Gambar yang diberikan . Ketika Gambar diputar oleh sudut terbaik, persegi panjang yang sejajar dengan sumbu X dan Y dan menuliskan Gambar memiliki area terkecil.
Persegi panjang yang menuliskan gambar ditampilkan sebagai abu-abu terang pada gambar. Dalam Picture 2
, Anda dapat melihat bahwa rotasi Gambar yang ideal adalah sekitar 30 derajat searah jarum jam.
Sekarang, saya tahu algoritma bagaimana menemukan sudut ini, tetapi menurut saya itu sangat tidak efisien. Bunyinya seperti ini:
- Loop melalui sudut dari 0 hingga 45.
- Untuk sudut saat ini, untuk setiap titik angka hitung lokasi baru, diputar,
- Temukan batas-batas persegi panjang yang berisi gambar (minimum dan maksimum x, y) dan daftarkan jika itu adalah yang paling cocok sejauh ini
- Sudut selanjutnya
Ini adalah semacam metode brute-force dan bekerja dengan baik dan cukup cepat untuk angka-angka kecil. Namun, saya perlu bekerja dengan angka yang berisi hingga 10 juta poin, dan algoritma saya menjadi lambat.
Algoritma apa yang bagus untuk masalah ini?
sumber
Langkah pertama dari pendekatan Anda cacat - ada jumlah tak terhingga dari nilai nyata antara 0 dan 45, jadi tidak masuk akal untuk "mengulanginya". Namun, algoritme Anda dapat diperbaiki:
temukan cembung lambung poligon
lingkaran melalui jumlah terbatas (!) sudut yang diberikan oleh tepi luar cembung cembung
sekarang terapkan langkah 2 hingga 4 menggunakan sudut ini.
Ini berfungsi karena dapat ditunjukkan bahwa persegi panjang penutup minimum harus menyentuh salah satu tepi luar lambung cembung.
sumber