Đây là một câu hỏi tiếp theo cho câu hỏi khác .
Tôi muốn biết nếu có một mô hình chung / điển hình / tốt nhất để chia tỷ lệ đại diện của tôi về thế giới (hiện tại là 160Kmx160Km) để phù hợp với khu vực vẽ (hiện tại là 800x600 pixel).
Tôi có thể nghĩ về ít nhất bốn cách tiếp cận khác nhau:
Naïve one (cách tôi đã làm cho đến nay). Tôi đã triển khai một hàm toàn cục sc(vector)
, đơn giản sẽ trả về một bản sao thu nhỏ của vectơ được truyền vào. Tất nhiên điều này hoạt động, nhưng bắt buộc tôi phải viết mã như:
drawCircle(sc(radius), sc(position))
Chức năng gói . Tôi có thể định nghĩa một số hàm, mỗi hàm bao bọc một phần mềm trung gian ban đầu. Ví dụ tôi có thể định nghĩamyDrawCircle
rằng trước tiên sẽ chia tỷ lệ các đối số cần chia tỷ lệ, sau đó gọi drawCircle
với đối số sau. Điều này sẽ làm cho mã của tôi có thể dễ đọc hơn và dễ bảo trì hơn, nhưng tôi nên viết rất nhiều hàm gói, nghe có vẻ ngớ ngẩn.
Chức năng trang trí . Tôi chỉ đơn giản là có thể trang trí các chức năng trung gian hiện có, cung cấp rộng tự động cho tất cả các thông số mà là một instantiation của lớp Vector3D
, nhưng vấn đề là những chức năng cũng làm việc với các thông số tương tự là list
hay Vector2D
quá, và trang trí sẽ không có cách nào để biết danh sách nào cần được thu nhỏ (ví dụ bán kính) và danh sách nào không (giá trị RGB).
Khởi tạo bề mặt . Khi xác định bề mặt tôi sẽ vẽ, tôi có thể xác định hệ số tỷ lệ (để sau đó tôi sẽ sử dụng mét và không phải pixel làm tham số). Điều này sẽ làm việc minh bạch cho tôi và sẽ là giải pháp lựa chọn của tôi, nhưng tất nhiên nó nên được thực hiện trong phần mềm trung gian, vì vậy nó không phải là một lựa chọn thực sự.
... Dù sao đi nữa: vì đây là một vấn đề rất phổ biến, tôi tự hỏi liệu có một mô hình được thiết lập nào giải quyết vấn đề này một cách tao nhã mà tôi không thể tìm thấy.
PS: Đối với dự án này, tôi đang sử dụng python (với pygame ), nhưng - mặc dù câu trả lời dành riêng cho python / pygame rất được đánh giá cao, tôi quan tâm đến mô tả chung / cấp cao của mẫu hơn là triển khai cụ thể.
Cảm ơn bạn trước thời gian và chuyên môn của bạn.