मैं दो भिन्न 2D निर्देशांक प्रणालियों के बीच कैसे परिवर्तित करूं?


10

मैं एक समन्वय प्रणाली को दूसरे से समन्वयित करने की कोशिश कर रहा हूं, ताकि मैं इसे एक छवि पर खींच सकूं।

मूल रूप से गंतव्य समन्वय प्रणाली इस प्रकार है:

X range: 0 to 1066
Y range: 0 to 1600

(बस एक मानक छवि जो मैं 1066 x 1600 के आकार के साथ आ रहा हूँ)

जिस स्थिति में मैं चित्र बनाने की कोशिश कर रहा हूं, वास्तव में उसका आकार एक जैसा है, लेकिन समन्वय प्रणाली अलग है। सभी निर्देशांक की अवधि 1066x1600 है।

लेकिन एक समन्वित उदाहरण होगा:

(111.33f, 1408.41f)
(-212.87f, 1225.16f)

इस समन्वय प्रणाली की सीमा है:

X range: -533.333 to 533.333
Y range: 533.333 to 2133.333

मुझे ऐसा लगता है कि यह बहुत आसान गणित है, लेकिन किसी कारण से मुझे नहीं मिल रहा है।

मैं पहले दिए गए निर्देशांक प्रणाली में दिए गए निर्देशांक को कैसे परिवर्तित कर सकता हूं?


3
यदि दो समन्वय प्रणालियों में समान बेस वैक्टर हैं तो आप बस स्केलिंग कारक का उपयोग कर सकते हैं। यदि उनके पास समान आधार वैक्टर नहीं है तो आधार परिवर्तन आवश्यक है।
थलडोर

जवाबों:


7

आप पहले मूल्य को सामान्य कर सकते हैं, यह आपको [0,1] रेंज में एक मूल्य देगा। आप इसे एक्स प्रतिशत के रूप में मान सकते हैं, न्यूनतम और अधिकतम मानों के बीच के मान का प्रतिशत। तब आप पा सकते हैं कि गंतव्य स्थान के माध्यम से X प्रतिशत क्या है, यह देखकर कि यह प्रतिशत आपके गंतव्य समन्वय प्रणाली में है। मैं एक उदाहरण भाषा के रूप में जावा कोड का उपयोग करूंगा, मुझे यकीन है कि अवधारणाएं किसी भी भाषा में अनुवाद करने के लिए पर्याप्त स्पष्ट हैं।

तो सामान्य करें:

public static float normalize(float value, float min, float max) {
    return Math.abs((value - min) / (max - min));
}

अपने उदाहरण का उपयोग करके आप इनपुट करेंगे:

xPercent = normalize(x,0,1066);

फिर पता करें कि वह गंतव्य प्रणाली में कहां है। जैसे कुछ के साथ

destX = xPercent*(Math.abs(max-min)) + min;

या अपने मूल्यों का उपयोग करने के लिए:

destX = xPercent*(Math.abs(533.33--533.33)) + -533.33;

तो उदाहरण के लिए 1000 के x मान के साथ आप अपने गंतव्य को सिस्टम को समन्वयित करने के लिए मैप करेंगे 467.29

वैकल्पिक रूप से , यदि समन्वय प्रणालियां हमेशा समान रहेंगी, तो आप उनके बीच के अनुपात की पूर्व गणना कर सकते हैं।

इसलिए:

xRatio = (Math.abs(srcMax-srcMin))/(Math.abs(destMax-destMin));

destX = x*xRatio+destMin;

जावा (C #) क्यों? उन्होंने जावा कोड के लिए नहीं पूछा :)
क्रैविमीर

6
इसका उदाहरण देना है। इसका उपयोग करने की आवश्यकता नहीं है, और अवधारणा पर्याप्त रूप से स्पष्ट है।
MichaelHouse

लेकिन अगर मैं ऐसा करता हूं: destX = xPercent * (Math.abs (533.33--533.33)) + -533.33; मुझे हमेशा एक नकारात्मक मूल्य मिलता है, और परिणाम समन्वय प्रणाली सिर्फ 0-1066 से है, क्या मुझे सभी निर्देशांक को चारों ओर स्विच करना चाहिए?
गेसू

उन्हें इधर- उधर घुमाया और मैं अभी भी डंप कर रहा हूं । एक अन्य पोस्ट की तरह ही dan.tanaris4.com/sota.png , शायद मैं पूरी तरह से एक और मुद्दा (सी # और ड्राइंग से संबंधित) कर रहा हूं। धन्यवाद दोस्तों!
गेसू

समझ गया, किसी कारण से मुझे xPercent = 1.0f - xPercent
Geesu

4

यह सरल गणित है:

res = ( src - src_min ) / ( src_max - src_min ) * ( res_max - res_min ) + res_min

src - स्रोत समन्वय प्रणाली

Res - परिणाम समन्वय प्रणाली

संपादित करें - गणित की व्याख्या

( src - src_min ) / ( src_max - src_min )स्रोत समन्वय प्रणाली की समान लंबाई के साथ शून्य से शुरू होने वाली समन्वय प्रणाली में इसका अनुवाद करता है (0.0, src_max - src_min )। तब यह सिस्टम को समन्वित करने के लिए मूल्य को मापता है (0.0, 1.0)

* ( res_max - res_min ) इस तराजू में परिणाम समन्वय प्रणाली की लंबाई के साथ शून्य से शुरू होने वाली समन्वय प्रणाली है (0.0, dst_max - dst_min)

+ res_min परिणाम को समन्वित प्रणाली के लिए मूल्य अनुवाद करता है (dst_min, dst_max)


मैंने यह भी सोचा था, लेकिन यह ठीक से प्रदर्शित नहीं हो रहा है: dip.tanaris4.com/sota.png अंतिम समन्वय को हिट करना चाहिए जहां सफेद सर्कल सबसे नीचे है
गीसू

1
यह उन्हें गणित बिल्कुल नहीं समझाता है, क्यों नहीं? :)
MichaelHouse

@ Byte56 मेरे लिए काफी कुछ समझने के लिए सूत्र है, खासकर अगर यह केवल अंकगणितीय संचालन का उपयोग करता है, लेकिन मैंने उन लोगों के लिए स्पष्टीकरण जोड़ा है जो इसकी आवश्यकता होगी :)
kravemir

1
@ जीसु तब शायद आप कुछ और बुरा कर रहे हैं (मैट्रिस का प्रतिपादन?)।
क्रैविमीर

2
इसे अपडेट करने के लिए धन्यवाद। मुझे आमतौर पर लगता है कि उत्तर देना बेहतर है जो क्यों समझाने की कोशिश करता है। अन्यथा आप इस सवाल और इसी तरह की समस्याओं को हल करने के बजाय इस सवाल का जवाब दे रहे हैं । यह "एक आदमी को एक मछली देना, एक आदमी को मछली सिखाना" प्रकार की चीज है।
MichaelHouse

3

2 डी के लिए मूल समीकरण ट्रांसफॉर्मेशन (बीजगणित में, बिना घुमाव शामिल) है:

TargetCoordinate = TranslateFactor + ScalingFactor*SourceCoordinate

SourceCoordinate (S1, S2) में दो बिंदुओं से मेल खाती टार्गेटकॉर्डिनेट (T1, T2) में दो बिंदु दिए गए हैं TranslateFactorऔर ScalingFactorहल करके दिए गए हैं:

T1 = TranslateFactor + ScalingFactor*S1
T2 = TranslateFactor + ScalingFactor*S2

जो परिणाम:

TranslateFactor = (T2*S1 - T1*S2) / (S1 - S2)
ScalingFactor   = (T2 - T1) / (S2 - S1)

आपके मामले में, x समन्वय के लिए

S1 = 0    -> T1 = -533.333
S2 = 1066 -> T2 = 53.333

और इस तरह,

TranslateFactor = -533.333
ScalingFactor   = 1.000625
=> TargetCoordinate = (-533.333) + (1.000625)*SourceCoordinate

y उसी प्रक्रिया का समन्वय करते हैं


S1 और S2 में समान x / y समन्वय नहीं हो सकता है जो शून्य से विभाजन की ओर जाता है।
zwcloud

0

कुछ धारणाएँ बनाना:

  • सुविधा और शक्ति के लिए आप मैट्रिक्स आवेग में रुचि रखते हैं (अंततः); तथा
  • आप सजातीय निर्देशांक से परिचित हैं।

फिर सवाल यह है कि: मेरे आधार परिवर्तन के लिए सजातीय परिवर्तन मैट्रिक्स क्या है?

इसका उत्तर देने के लिए हमें पहले तीन सहायक क्वेशंस के उत्तर की आवश्यकता है:

  1. मेरा उद्गम कहाँ से हुआ?
  2. मेरे एक्स-एक्सिस का क्या हुआ? आज्ञा देना (M11, M12) बिंदु के निर्देशांक हैं
  3. मेरे Y- अक्ष का क्या हुआ?

इस प्रकार के प्रश्नों के उत्तर निर्धारित करें:

  1. (M31, M32) मूल समन्वय प्रणाली के तहत नए मूल के निर्देशांक हैं।
  2. (M11, M12) मूल समन्वय प्रणाली में नई इकाई x-वेक्टर के निर्देशांक हैं।
  3. (M21, M22) मूल समन्वय प्रणाली में नई इकाई y-वेक्टर के निर्देशांक हैं।

फिर समरूप परिवर्तन मैट्रिक्स है:

( M11, M12,  0 )
( M21, M22,  0 )
( M31, M32,  1 )

यहाँ मेरा अधिवेशन यह है कि बिंदुओं को पंक्ति वैक्टर द्वारा दर्शाया जाता है, जो सामान्य कंप्यूटर ग्राफिक्स सम्मेलन है; गणितज्ञ और भौतिक विज्ञानी अक्सर उत्पीड़क का उपयोग करते हैं।


इस तरह के मैट्रिक्स द्वारा एक समन्वय प्रणाली का वर्णन किया जा सकता है: M11 = Xaxis.X, M12 = Xaxis.Y, M21 = Yaxis.X, M22 = Yaxis.Y, M31 = origin.X, M32 = Origin.Y। एक समन्वय प्रणाली मैट्रिक्स ए और एक समन्वय प्रणाली मैट्रिक्स बी, पी * ए * इनवर्स (बी) को देखते हुए, जहां पी ए में निर्देशांक के रूप में एक बिंदु का प्रतिनिधित्व है, बी में निर्देशांक के रूप में बिंदु के प्रतिनिधित्व का उत्पादन करता है
जिम बैल्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.