Ini adalah pertanyaan lanjutan untuk pertanyaan ini .
Saya ingin tahu apakah ada pola umum / tipikal / terbaik untuk skala representasi saya di dunia (saat ini 160Kmx160Km) agar sesuai dengan area gambar (saat ini 800x600 piksel).
Saya dapat memikirkan setidaknya empat pendekatan yang berbeda:
Naif satu (cara saya melakukannya sejauh ini). Saya mengimplementasikan fungsi global sc(vector)
yang hanya akan mengembalikan salinan vektor yang diperkecil. Ini tentu saja berfungsi, tetapi mengharuskan saya untuk menulis kode seperti:
drawCircle(sc(radius), sc(position))
Fungsi pembungkus . Saya dapat mendefinisikan beberapa fungsi, masing-masing membungkus satu middleware asli. Sebagai contoh saya bisa mendefinisikan myDrawCircle
bahwa pertama-tama akan skala argumen yang perlu scaling, dan kemudian memanggil drawCircle
dengan yang terakhir. Ini akan membuat kode saya mungkin lebih mudah dibaca dan lebih mudah dirawat, tetapi saya harus menulis banyak fungsi pembungkus, yang kedengarannya konyol.
Penghias fungsi . Saya hanya bisa menghiasi fungsi middleware yang ada, menyediakan penskalaan otomatis untuk semua parameter yang merupakan instance dari kelas Vector3D
, tetapi masalahnya adalah fungsi tersebut juga berfungsi dengan parameter yang sama list
atau Vector2D
terlalu, dan dekorator tidak memiliki cara untuk mengetahui daftar mana yang perlu diskalakan (jari-jari misalnya) dan yang tidak (nilai RGB).
Inisialisasi permukaan . Ketika mendefinisikan permukaan yang akan saya gambar, saya bisa mendefinisikan faktor penskalaan (sehingga saya akan menggunakan meter dan bukan piksel sebagai parameter). Ini akan bekerja secara transparan untuk saya dan akan menjadi solusi pilihan saya, tetapi tentu saja itu harus diterapkan di middleware, jadi itu bukan pilihan nyata.
... bagaimanapun juga: karena ini adalah masalah yang sangat umum, saya bertanya-tanya apakah ada pola yang mapan yang dengan elegan menyelesaikan masalah ini yang gagal saya temukan.
PS: Untuk proyek ini saya menggunakan python (dengan pygame ), tetapi - meskipun jawaban khusus python / pygame sangat dihargai, saya lebih tertarik pada deskripsi umum / tingkat tinggi dari pola daripada implementasi konkretnya.
Terima kasih sebelumnya atas waktu dan keahlian Anda.