Це додаткове запитання до цього іншого .
Мені хотілося б знати, чи є загальна / типова / найкраща картина для масштабування мого представлення світу (на даний момент 160Kmx160Km), щоб вона підходила до області малювання (на даний момент 800x600 пікселів).
Я можу придумати щонайменше чотири різні підходи:
Наївна одна (як я це робила досі). Я реалізував глобальну функцію, sc(vector)
яка просто поверне зменшену копію переданого вектора. Це, звичайно, працює, але зобов'язує мене написати код на зразок:
drawCircle(sc(radius), sc(position))
Функції обгортання . Я міг визначити кілька функцій, кожна з яких обертала оригінальну проміжну програму. Наприклад, я міг би визначити, myDrawCircle
що спочатку буде масштабувати аргументи, які потребують масштабування, а потім викликати drawCircle
останні. Це зробить мій код, можливо, більш читабельним і простішим у обслуговуванні, але я повинен написати багато функцій обгортання, які звучать нерозумно.
Функція декоратор . Я міг би просто прикрасити існуючі функції середнього програмного забезпечення, забезпечуючи автоматичне масштабування всіх параметрів, які є екземпляром класу Vector3D
, але проблема полягає в тому, що ці функції також працюють з тими ж параметрами, які є list
або Vector2D
занадто, і декоратор не міг би знати які списки потрібно масштабувати (наприклад, радіус), а які ні (значення RGB).
Поверхнева ініціалізація . Визначаючи поверхню, яку я буду малювати, я міг би визначити коефіцієнт масштабування (щоб я потім використовував метри, а не пікселі як параметри). Це працювало б прозоро для мене і було б моїм рішенням вибору, але, звичайно, його слід реалізовувати в середньому програмному забезпеченні, тому це не реальний варіант.
... так чи інакше: оскільки це дуже поширена проблема, мені цікаво, чи існує усталений зразок, який елегантно вирішує цю проблему, яку мені не вдалося знайти.
PS: Для цього проекту я використовую python (з pygame ), але - хоча відповідь, що стосується python / pygame, дуже цінується, мене більше цікавить загальний / вищий опис шаблону, а не його конкретна реалізація.
Заздалегідь дякую за ваш час та досвід.