2009-07-02 18 views
5

मेरे पास एक 3 डी गणित समस्या है जिसे मैं हल नहीं कर सकता।उलटा 3 डी (त्रिकोण) प्रक्षेपण

मेरे पास 3 अंक हैं। डेटा एक विमान पर एक (2 डी) समन्वय है, जो 3 डी स्पेस में कहीं तैर रहा है। मैं प्रक्षेपण के (2 डी) समन्वय को भी जानता हूं। यही कारण है कि डेटा के निम्नलिखित सरणी में परिणाम:

[[[x1,y1], [px1,py1], 
[[x2,y2], [px2,py2], 
[[x3,y3], [px3,py3]] 

कहाँ सामान्य (x1 आदि) निर्देशांक अनुमान निर्देशांक के लिए (PX1 आदि) विमान और दूसरे पर निर्देशांक के लिए खड़े हैं।

मैं क्या करना चाहता हूं प्रोजेक्ट नया 2 डी समन्वय ([x4, y4]) है।

मैं अब तक क्या करने की कोशिश की:

बेशक आप प्रक्षेपण के लिए एक आंख की जरूरत है, तो मैं स्थापित करने के लिए है कि [XE, तु, -1]। एक्सई और आप जानते हैं। (यह फोटो संदर्भ है, इसलिए मैंने सिर्फ तस्वीर के केंद्र में आंख रखी।)

आंख के नीचे मैंने प्रक्षेपण सतह (z = 0) रखा।

[[[x1,y1], [px1,py1,0], 
[[x2,y2], [px2,py2,0], 
[[x3,y3], [px3,py3,0]] 

मैं के बाद से मुझे लगता है कि विमान के बारे में कुछ भी पता नहीं है, हवाई जहाज पर निर्देशांक के लिए एक ही नहीं कर सकते: यह निम्नलिखित प्रक्षेपण निर्देशांक देता है।

मुझे यह भी लगा कि मैं प्रक्षेपण निर्देशांक के माध्यम से आंखों से चल रही रेखाओं का पैरामीटरयुक्त सूत्र बना सकता हूं। लाइन 1 के लिए यह होगा:

line1x = xe+(px1-xe)*t1 
line1y = ye+(py1-ye)*t1 
line1z = -1+t1 // = -1+(0--1)*t1 

मुझे 3 डी में बिंदुओं के बीच की दूरी भी पता है। यह 2 डी में जैसा ही है। इसका मतलब है कि पॉइंट 1 और पॉइंट 2 के बीच की दूरी sqrt ((x1-x2)^2 + (y1-y2)^2) होगी।

मुझे किसी भी समय लाइनों (लाइन 1 और लाइन 2) के बीच की दूरी भी पता है। वह sqrt ((line1x-line2x)^2 + (line1y-line2y)^2 + (line1z-line2z)^2) है।

हालांकि, मुझे वास्तव में नहीं पता कि यहां से कैसे जाना है ... या यहां तक ​​कि यह लेने का सही मार्ग है या नहीं।

मुझे उम्मीद है कि आप समझेंगे कि मैं क्या करने में सक्षम होना चाहता हूं, और आप मेरी मदद कर सकते हैं।

अग्रिम धन्यवाद!

+0

आप कह रहे हैं कि आप तीन अंक (xn, yn) जो अंक (PXN, pyn) में एक विमान पर पेश कर रहे हैं दी जाती है - और आप बाहर काम करने पर एक नया बिंदु (x4, Y4) मैप करने के लिए कैसे चाहते हैं विमान? –

+0

हां, गुडगाई, यही वह है जो मैं कह रहा हूं। हालांकि, जब मैं अपने प्रश्न में 'विमान' शब्द का उपयोग करता हूं, तो मेरा मतलब है कि जिस विमान पर (xn, yn) बिंदु स्थित हैं (जो मुझे लगता है कि चौथे बिंदु को मानचित्र करने का प्रयास करते समय महत्वपूर्ण है)। गलतफहमी के लिए खेद है। –

+0

आप एक विमान (xn, yn) जो प्रक्षेपण विमान (PXN, pyn) पर पेश कर रहे हैं पर तीन अंक है। यह एक केंद्रीय (परिप्रेक्ष्य) प्रक्षेपण भी है, इसलिए सभी बिंदुओं को एक बिंदु से किरणों के माध्यम से पेश किया जाता है। आप जानना चाहते हैं कि प्रक्षेपण को कैसे उलटना है: यानी, यदि आपको एक अनुमानित बिंदु (px4, py4) दिया जाता है (x4, y4) कैसे प्राप्त करें?जो मुझे नहीं मिलता है वह आपके मूल बिंदुओं में कोई भी जेड समन्वय नहीं करता है। वे केवल एक्स/वाई क्यों हैं - क्या आप ज़ेड कोऑर्डिनेट जानते हैं या ये एक्स/वाई समन्वय विमान के स्वयं समन्वय प्रणाली के भीतर हैं ...? –

उत्तर

1
A1, A2, A3 के लिए सुलझाने

लिखें

(x4,y4,1) = A1*(x1,y1,1) + A2*(x2,y2,1) + A3*(x3,y3,1), 

। फिर

(xp4,yp4) = A1*(px1,py1) + A2*(px2,py2) + A3*(px3,py3). 

पहला संपादन।

(ए 1, ए 2, ए 3) रैखिक प्रणाली मैट * (ए 1, ए 2, ए 3) = (x4, y4,1) का समाधान है।

 (x1 x2 x3) 
Mat = (y1 y2 y3) 
     ( 1 1 1) 

इसे विभिन्न तरीकों से हल किया जा सकता है। उदाहरण के लिए Cramer's नियमों का उपयोग करना।

दूसरा संपादन।

जो मैंने डाला है वह ज़ेड निर्देशांक नहीं है, लेकिन इनपुट निर्देशांक के एकरूप एक्सटेंशन (जो यूक्लिडियन निर्देशांक होना चाहिए)। (ए 1, ए 2, ए 3) त्रिकोण शीर्षकों द्वारा गठित आधार के आधार पर समरूप समन्वय हैं।

तीसरा संपादन।

3 डी विमान और प्रक्षेपण विमान के बीच पत्राचार एक प्रोजेक्टिव परिवर्तन है। इसे 3x3 मैट्रिक्स टी के रूप में परिभाषित किया जा सकता है जो इनपुट विमान (x, y, 1) (आपके समन्वय प्रणाली में) में समरूप समन्वय पर काम करता है और प्रक्षेपण विमान में निर्देशांक (यू, वी, टी) का उत्पादन करता है। फिर पीएक्स = यू/टी और पीई = वी/टी।

यदि किसी बिंदु में इनपुट प्लेन के तीन बिंदुओं (उसी पंक्ति पर नहीं) के आधार पर समरूप समन्वय (ए 1, ए 2, ए 3) आधार पर होता है तो इसके प्रक्षेपण के अनुमानित आधार पर समान समरूप समन्वय होते हैं।

यह 1 घंटे पहले मुझे काफी स्पष्ट था, लेकिन अब मुझे संदेह हो रहा है: शायद समस्या के एक समाधान के लिए अंक की एक अतिरिक्त जोड़ी जानना आवश्यक है ... यदि आप इसे पा सकते हैं, तो जेजी द्वारा "बीजगणित प्रोजेक्टिव ज्यामिति" पुस्तक पर एक नज़र डालें सेम्पल और जीटी। Kneebone।

+0

ऐसा लगता है कि यह सच हो सकता है ... लेकिन मैं ए 1, ए 2 और ए 3 कैसे निर्धारित करूं? धन्यवाद! –

+0

मुझे समझ में नहीं आता कि आप बिना किसी आंख के इस समस्या को कैसे हल कर सकते हैं ... आंख का स्थान प्रक्षेपण को बदल देगा, है ना? –

+0

यदि आप प्रारंभिक विमान की समन्वय प्रणाली में स्वयं को स्थानांतरित करते हैं, तो आप प्रक्षेपण विमान खो गए हैं। मुझे नहीं लगता कि इसे आसानी से हल किया जा सकता है। –

0

मुझे समस्या वास्तव में समझ में नहीं आती है? क्या आप किसी ऑब्जेक्ट को 3 डी-स्पेस में ढूंढने की कोशिश कर रहे हैं जो आपको पता है कि एक विमान (उदाहरण के लिए दीवार या मंजिल) पर स्थित है और आपके पास केवल एक इनपुट है जिसमें से 3 अंक हैं (जिनमें से आप 3 डी स्पेस के बीच की दूरी जानते हैं) एक कैमरा छवि?

उस स्थिति में आपके पास 3 समीकरण होंगे जहां स्थानीय कॉर्डिनेट्स ऑब्जेक्ट स्पेस में बिंदु निर्देशांक (बिंदुओं के बीच ज्ञात दूरी प्रदान करता है) और दुनिया 3 डी-स्पेस में ऑब्जेक्ट्स स्थिति है।

cameraCoordinates = world*view*projection*localCoordinates 

यह 6 अज्ञात (3 डी में घूर्णन और स्थिति) और 6 समीकरण (प्रत्येक बिंदु के लिए 2) के साथ एक समीकरण प्रणाली उत्पन्न करेगा। हालांकि यह गैर रैखिक होगा इसलिए आपको संख्यात्मक तरीकों का उपयोग करके इसे हल करना होगा। न्यूटन रैप्सन विधि आज़माएं।

1

आपको homographic functions और homogeneous coordinates का उपयोग करना चाहिए, जो आमतौर पर 3 डी परिप्रेक्ष्य संचालन के लिए उपयोग किए जाते हैं।

+0

मैं उसमें देख लूंगा। धन्यवाद! –

2

एक फ़ंक्शन प्रोजेक्शन है, जो अंक को बदल सकता है ताकि प्रोजेक्शन ([x1, y1]) = [px1, py1], प्रोजेक्शन ([x2, y2]) = [px2, py2], प्रक्षेपण ([x3) , वाई 3]) = [पीएक्स 3, पी 3]। अगर मैं सही ढंग से समझता हूं, तो लेखक यह जानना चाहता है कि इस प्रोजेक्शन फ़ंक्शन को कैसे ढूंढें, ताकि वह [x4, y4] को [px4, py4] में trasnform कर सके।

जब से हम विमानों के साथ यहां काम कर रहे हैं, प्रोजेक्शन समारोह इस तरह दिखता है:

Proj([ix, iy]) : 
    return [ax*ix + bx*iy + cx, 
      ay*iy + by*iy + cy]; 

का उपयोग करना है कि हम हल करने के लिए 2 समीकरण सिस्टम बना सकते हैं।

पहले एक
x1 * कुल्हाड़ी + y1 * bx + cx = PX1
x2 * कुल्हाड़ी + y2 * bx + cx = PX2
x3 * कुल्हाड़ी + y3 * बीएक्स + सीएक्स = पीएक्स 3

कुल्हाड़ी के लिए सुलझाने, bx और cx हमें

ax = (px1 * (y3 - y2) - px2*y3 + px3*y2 + (px2 - px3) * y1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 
bx = - (px1 * (x3 - x2) - px2*x3 + px3*x2 + (px2 - px3) * x1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 
cx = (px1 * (x3*y2 - x2*y3) + x1 * (px2*y3 - px3*y2) + (px3*x2 - px2*x3) * y1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 

दूसरा एक x1 * ay द्वारा + y1 * + cy = py1
x2 देता है * + वाई 2 * + साइ = py2
x3 * ay + Y3 * द्वारा + cy = py3

द्वारा और cy ay, के लिए सुलझाने हमें

ay = (py1 * (y3 - y2) - py2*y3 + py3*y2 + (py2 - py3) * y1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 
by = - (py1 * (x3 - x2) - py2*x3 + py3*x2 + (py2 - py3) * x1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 
cy = (py1 * (x3*y2 - x2*y3) + x1 * (py2*y3 - py3*y2) + (py3*x2 - py2*x3) * y1)/
    (x1 * (y3 - y2) - x2*y3 + x3*y2 + (x2 - x3) * y1) 

नोट देता है : मैंने समीकरण प्रणाली को हल करने के लिए this tool का उपयोग किया।

+0

वाह, व्यापक उत्तर के लिए धन्यवाद, हालांकि, मुझे लगता है कि यह समाधान थोड़ा सा छायादार है क्योंकि आपके द्वारा उपयोग की जाने वाली विधि वास्तव में प्रक्षेपण से संबंधित नहीं है। उदाहरण के लिए, कोई आंख नहीं है। इसलिए मुझे संदेह है कि यह ठीक से काम करेगा ... फिर भी मैं निश्चित रूप से इसे आज़मा दूंगा। मैं आपको बता दूंगा कि यह काम करता है या नहीं। धन्यवाद! –

+0

यह समाधान आपको मूल त्रिकोण के विमान के बारे में कोई आंख या कोई जानकारी नहीं देगा, लेकिन इसे आपकी समस्या का समाधान करना चाहिए। महान उपकरण को इंगित करने के लिए –

+0

+1 – PiotrK

0

देर से एक "बिट", लेकिन उच्चतम रेटेड उत्तर समस्या के 3 डी-स्पेस को ध्यान में रखता नहीं है। हमारे पास एक कैमरे की सतह पर एक विमान (वास्तव में किसी भी 3 डी अंक) प्रोजेक्ट (प्रोजेक्टिव ज्यामिति में) पर तीन बिंदुओं के साथ एक परिप्रेक्ष्य प्रक्षेपण समस्या है।

इस समस्या का एक असंगत समाधान देना संभव नहीं है (एकाधिक समाधान मौजूद हैं)। एक कैमरे की स्थिति खोजने और की सामान्य समस्या 3 3 डी अंक दिया नहीं आ सकता और उनके संबंधित 2 डी परिप्रेक्ष्य अनुमानों (के साथ मूल RANSAC paper, जो चार संभव संभव समाधान करने के लिए छोड़ देना से पी 3 पी (परिप्रेक्ष्य-3-प्वाइंट) कलन विधि का उपयोग हल किया जा सकता कैमरे के सामने अंक)।

कैमरा पॉज़ को देखते हुए, अतिरिक्त विमान बिंदुओं के प्रक्षेपण की गणना करना तुच्छ है।