एपसिलॉन और कोऑर्डिनेट सिस्टम

आपका चुना गया कोऑर्डिनेट सिस्टम, ब्रैंड के इप्सिलॉन वैल्यू के साथ काम करता है. दूसरे शब्दों में, आपका चुना गया कोऑर्डिनेट सिस्टम यह तय करता है कि 1 वर्ल्ड यूनिट का क्या मतलब है. कोऑर्डिनेट सिस्टम, inputToWorld ट्रांसफ़ॉर्म मैट्रिक्स वैल्यू में दिखता है. यह वैल्यू, InProgressStrokesView.startStroke() को पास की जाती है. साथ ही, यह वैल्यू उस ट्रांसफ़ॉर्म के जैसी होती है जिसे ड्राई स्ट्रोक बनाते समय Canvas पर लागू किया जाता है.

कोई सामान्य ऐप्लिकेशन सिर्फ़ वर्ल्ड यूनिट का इस्तेमाल कर सकता है. साथ ही, startStroke() के strokeToWorldTransform आर्ग्युमेंट को डिफ़ॉल्ट आइडेंटिटी मैट्रिक्स के तौर पर छोड़ सकता है.

अगर आपका ऐप्लिकेशन, ड्राइंग की जगह को पैन करने, ज़ूम करने या घुमाने की सुविधा देता है, तो ट्रांसफ़ॉर्म मैट्रिक्स की सटीक वैल्यू समय के साथ बदल जाएगी. हालांकि, इन बदलावों से यह पता चलता है कि उपयोगकर्ता जिस कैमरे से ड्राइंग की जगह को देखता है वह आपके वर्ल्ड कोऑर्डिनेट सिस्टम को कैसे देख रहा है.

वर्ल्ड कोऑर्डिनेट सिस्टम को एक ग्रिड के तौर पर देखा जा सकता है. इसमें हर सेल, वर्ल्ड यूनिट के साइज़ की होती है. एपसिलॉन, उस ग्रिड का साइज़ होता है. यह दुनिया की इकाइयों का फ़्लोटिंग पॉइंट नंबर होता है.

जब उपयोगकर्ता आपके कॉन्टेंट को ज़ूम इन करते हैं, तो वे वर्ल्ड यूनिट ग्रिड को भी ज़ूम इन करते हैं. इसलिए, डिफ़ॉल्ट 100% ज़ूम लेवल के हिसाब से वर्ल्ड यूनिट और ऐब्सिलॉन साइज़ का चुनाव करना ज़रूरी है.

दुनिया की इकाई के साइज़ की परिभाषा और दुनिया की इकाइयों में ऐप्सीलॉन वैल्यू, आपके ऐप्लिकेशन के पूरे जीवनकाल में तय की गई वैल्यू होनी चाहिए.

इंटरनल तौर पर लागू करने के लिए, इप्सिलॉन का इस्तेमाल किया जाता है. इससे यह तय किया जाता है कि दो पॉइंट को एक ही पॉइंट के तौर पर मानने के लिए, उन्हें एक-दूसरे के कितने करीब होना चाहिए. दूसरे शब्दों में, अगर दूरी, ऐप्साइलन से कम है, तो उसे शून्य दूरी माना जाता है. इसका इस्तेमाल, इंटरनल कैलकुलेशन को क्वांटाइज़ करने और राउंड करने के लिए किया जाता है.

वर्ल्ड यूनिट के सही साइज़ और ऐप्सीलॉन वैल्यू क्या हैं?

अलग-अलग स्क्रीन साइज़ और डिवाइस डेंसिटी के हिसाब से, दुनिया की यूनिट का साइज़ डेंसिटी इंडिपेंडेंट होना चाहिए. ऐसे मामलों के लिए, डेंसिटी-इंडिपेंडेंट पिक्सल (डीपी) का इस्तेमाल किया जाता है. आम तौर पर, वर्ल्ड यूनिट के साइज़ के तौर पर 1 dp चुनें.

एपसिलोन की तय वैल्यू चुनते समय, इंटरनल तौर पर लागू किए गए राउंडिंग नंबर को पिक्सल से ज़्यादा दूरी पर ले जाने से बचें. अगर वर्ल्ड यूनिट का साइज़ 1 डीपी है, तो ज़्यादा डिसप्ले डेंसिटी वाले डिवाइसों पर पिक्सल का साइज़ तय करने के लिए, इप्सिलॉन का साइज़ ज़्यादा से ज़्यादा 1/4 (0.25 वर्ल्ड यूनिट) होना चाहिए. ऐसे डिवाइसों पर 1 डीपी, 4 पिक्सल के बराबर हो सकता है. हालांकि, अगर आपको उपयोगकर्ता को अपने कॉन्टेंट को 10 गुना तक ज़ूम करने की सुविधा देनी है और फिर भी ऐब्सिलॉन से जुड़ी राउंडिंग को 1 पिक्सल या उससे कम रखना है, तो ऐब्सिलॉन को 0.25 को 10 से भाग देने पर मिलने वाली संख्या के बराबर होना चाहिए. यह 0.025 वर्ल्ड यूनिट के बराबर होता है.

इसका मतलब यह नहीं है कि 10 गुना से ज़्यादा ज़ूम इन नहीं किया जा सकता. हालांकि, ऐसा करने पर आपको स्ट्रोक रेंडरिंग में कुछ गड़बड़ियां और आर्टफ़ैक्ट दिख सकते हैं.

एपसिलॉन वैल्यू चुनते समय, ज़ूम इन करने पर सटीक जानकारी और कंप्यूटेशनल संसाधनों के बीच संतुलन बनाए रखना होता है. जैसे:

  • ज़्यादा सटीक ज्यामिति का हिसाब लगाने के लिए सीपीयू साइकल
  • उस ज्यामिति में ज़्यादा जानकारी सेव करने के लिए मेमोरी
  • उस ज्यामिति को रेंडर करने में GPU को लगा समय

ये दिशा-निर्देश, डिफ़ॉल्ट रूप से लागू होने वाले सामान्य दिशा-निर्देश हैं. हालांकि, इनका इस्तेमाल करके, अपनी ज़रूरतों के हिसाब से कोऑर्डिनेट सिस्टम और ऐब्सिलॉन वैल्यू चुनी जा सकती हैं.

सुझाई गई इन वैल्यू से बहुत ज़्यादा अलग वैल्यू देने पर, आपके आवेदन पर बुरा असर पड़ सकता है. उदाहरण के लिए, ज़्यादा संसाधनों का इस्तेमाल करने से, आपका ऐप्लिकेशन धीरे चल सकता है. कुछ मामलों में, फ़्लोटिंग-पॉइंट की सटीक जानकारी से जुड़ी समस्याएं, अजीब विज़ुअल आर्टफ़ैक्ट के तौर पर भी दिख सकती हैं.