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