यह इस अन्य के लिए एक अनुवर्ती प्रश्न है ।
मैं यह जानना चाहूंगा कि क्या दुनिया के मेरे प्रतिनिधित्व (वर्तमान में 160Kmx160Km) को ड्राइंग क्षेत्र (वर्तमान में 800x600 पिक्सल) पर फिट करने के लिए एक सामान्य / विशिष्ट / सर्वोत्तम पैटर्न है ।
मैं कम से कम चार अलग-अलग तरीकों से सोच सकता हूं:
एक भोले (जिस तरह से मैंने अब तक किया था)। मैंने एक वैश्विक फ़ंक्शन लागू किया है sc(vector)
जो बस पास की गई वेक्टर की एक स्केल डाउन कॉपी लौटाएगा। यह निश्चित रूप से काम करता है, लेकिन मुझे कोड लिखने के लिए बाध्य करता है:
drawCircle(sc(radius), sc(position))
लपेटने का कार्य । मैं कई कार्यों को परिभाषित कर सकता था, उनमें से प्रत्येक मूल मिडलवेयर को लपेटता था। उदाहरण के लिए, मैं परिभाषित कर सकता हूं myDrawCircle
कि पहले उन तर्कों को स्केल किया जाएगा जिन्हें स्केलिंग की आवश्यकता है, और फिर drawCircle
बाद वाले के साथ कॉल करें । यह मेरे कोड को शायद अधिक पठनीय और बनाए रखने में आसान बना देगा, लेकिन मुझे बहुत सारे रैपिंग फ़ंक्शंस लिखने चाहिए, जो मूर्खतापूर्ण लगते हैं।
फंक्शन डेकोरेटर । मैं बस मौजूदा मिडलवेयर फ़ंक्शंस को सजाने के लिए, सभी मापदंडों के लिए स्वचालित स्केलिंग प्रदान कर सकता हूं जो कि क्लास का एक पल है Vector3D
, लेकिन समस्या यह है कि वे फ़ंक्शंस समान मापदंडों के साथ list
या Vector2D
बहुत अधिक काम करते हैं, और डेकोरेटर को पता करने का कोई तरीका नहीं होगा। किन सूचियों को बढ़ाया जाना चाहिए (उदाहरण के लिए त्रिज्या) और जो नहीं (आरजीबी मान)।
सरफेस इनिशियलाइज़ेशन । जब मैं जिस सतह को खींचने जा रहा हूं, उसे परिभाषित करते हुए, मैं स्केलिंग फैक्टर को परिभाषित कर सकता था (ताकि मैं तब मीटर का उपयोग करूं और मापदंडों के अनुसार पिक्सल का उपयोग न करूं)। यह मेरे लिए पारदर्शी रूप से काम करेगा और मेरी पसंद का समाधान होगा, लेकिन निश्चित रूप से इसे मिडलवेयर में लागू किया जाना चाहिए, इसलिए यह एक वास्तविक विकल्प नहीं है।
... किसी भी तरह से: यह एक बहुत ही आम समस्या है, मुझे आश्चर्य है कि अगर कोई स्थापित पैटर्न है जो इस समस्या को हल करता है जिसे मैं खोजने में विफल रहा।
पुनश्च: इस परियोजना के लिए मैं अजगर ( pygame के साथ ) का उपयोग कर रहा हूं , लेकिन - हालांकि एक अजगर / pygame- विशिष्ट उत्तर की बहुत सराहना की जाती है, मैं इसके ठोस कार्यान्वयन के बजाय पैटर्न के सामान्य / उच्च-स्तरीय विवरण में अधिक रुचि रखता हूं।
आपके समय और विशेषज्ञता के लिए अग्रिम धन्यवाद।