तो तुम कुछ मनमाना मूल्य V
मिल गया है, और आप जानते हैं कि 0 < = V
< = Vmax
। आप एक पिक्सेल के एक्स-समन्वय की गणना करना चाहते हैं, इसे X
पर कॉल करें, जहां आपकी "स्क्रीन" में 0 से Xmax
से x-coordinates हैं। आप कहते हैं के रूप में, इस "सामान्य" जिस तरह से करने के लिए, आप
X = Xmax * V/Vmax
V = Vmax * X/Xmax
करना चाहते हैं तो मैं इसके बारे में सोचने के लिए की तरह मैं पहली बार की गणना V/Vmax
द्वारा मूल्य को सामान्य कर रहा हूँ 0 और 1 के बीच झूठ पसंद है, और मैं अधिकतम और अधिकतम के बीच मान प्राप्त करने के लिए अधिकतम से इस मान को गुणा करता हूं।
वही लॉगरिटिक रूप से करने के लिए आपको V
मान के लिए एक अलग निचली सीमा की आवश्यकता है। यदि वी < = 0 है, तो आपको ValueError
मिलता है। तो मान लें 0 < Vmin
< = V
< = Vmax
। फिर आपको उपयोग करने के लिए लॉगरिदम का पता लगाने की आवश्यकता है, क्योंकि उनमें से कई असीमित हैं।तीन सामान्यतः सामना होता है, कि इस तरह दिखना आधार 2, ई और 10 है, जो एक्स-अक्ष में जो परिणाम के साथ उन:
------|------|------|------|---- ------|------|------|------|----
2^-1 2^0 2^1 2^2 == 0.5 1 2 4
------|------|------|------|---- ------|------|------|------|----
e^-1 e^0 e^1 e^2 == 0.4 1 2.7 7.4
------|------|------|------|---- ------|------|------|------|----
10^-1 10^0 10^1 10^2 == 0.1 1 10 100
तो सिद्धांत रूप में, हम एक्स्पोनेंट्स पर भाव से बाईं ओर प्राप्त कर सकते हैं, । हम के रूप में ऊपर ही सिद्धांत का उपयोग कर सकते 0 और Xmax
के बीच कोई मान प्राप्त करने के लिए, और इस पाठ्यक्रम जहां लॉग में आता है की है आप आधार b
का उपयोग मान लिया जाये, तो आप आगे और पीछे कन्वर्ट करने के लिए इन एक्सप्रेशन का उपयोग कर सकते हैं:
from math import log
logmax = log(Vmax/Vmin, b)
X = Xmax * log(V/Vmin, b)/logmax
V = Vmin * b ** (logmax * X/Xmax)
यह सोचने का लगभग एक ही तरीका है, सिवाय इसके कि आपको पहले यह सुनिश्चित करना होगा कि log(somevalue, b)
आपको एक गैर-नकारात्मक ई मूल्य log
फ़ंक्शन के अंदर आप Vmin
द्वारा विभाजित करके ऐसा करते हैं। अब आप अभिव्यक्ति प्राप्त कर सकते हैं अधिकतम मूल्य से विभाजित कर सकते हैं, जो निश्चित रूप से log(Vmax/Vmin, b)
है, और आपको 0 और 1 के बीच एक मान मिलेगा, जैसा कि पहले जैसा था।
दूसरी तरफ हमें पहले सामान्यीकृत करने की आवश्यकता है (X/Xmax
), फिर उलटा funciton द्वारा अधिकतम उम्मीद (* logmax
) फिर से स्केल करें। इसके विपरीत, कुछ मूल्यों के लिए b
बढ़ाने के लिए विपरीत है। अब X
0 है, b ** (logmax * X/Xmax)
1 बराबर होगा, इसलिए सही निचली सीमा प्राप्त करने के लिए हम Vmin
से गुणा करें। या इसे एक और तरीका डालने के लिए, क्योंकि पहली बात यह है कि हम दूसरी तरफ जा रहे थे Vmin
द्वारा विभाजित करना, हमें Vmin
के साथ गुणा करने की आवश्यकता है जो हम अब करते हैं।
"ज़ूम" समीकरण के "दाईं ओर" करने के लिए, तुम सब करने की जरूरत है स्विच समीकरण है, तो आप V
से X
के लिए जा रहा है और लघुगणक अन्य रास्ते पर जा रहा ले exponentiate। सिद्धांत रूप में, वह है। क्योंकि आप भी सच है कि X
0 हो सकता है के साथ कुछ करने के लिए मिल गया है:
logmax = log(Xmax + 1, b)
X = b ** (logmax * (V - Vmin)/(Vmax - Vmin)) - 1
V = (Vmax - Vmin) * log(X + 1, b)/logmax + Vmin
सभी मानों का लॉग लें और बाकी एक ही है। सावधान रहें कि आपके पास शून्य नहीं हो सकता है (लॉग (0) ऋणात्मक है। inf) और न ही – yosukesabai
@ योसुकेसाबाई को पार करें: 'अधिकतम' के बहुत कम मूल्यों से निपटने के तरीके के बारे में कोई संकेत? –
यह '(एक्स/अधिकतम) * वी' है, और 'एक्स * वी/अधिकतम' – wim