2008-11-24 11 views
12

मैं एक चिकनी सतह बनाने के लिए एक सरल और कुशल तरीके से आने की कोशिश कर रहा हूं जो कई "नमूना" बिंदुओं को छेड़छाड़ करता है।एक चिकनी सतह बनाने के लिए 3 डी स्पेस में बिंदुओं के बीच अंतर करने का सरल तरीका

किसी भी एक्स, सतह पर वाई बिंदु के लिए, मैं 4 दिशाओं में से प्रत्येक में 4 नमूना बिंदुओं की पहचान करता हूं (एक्स पर अगले उच्च और निचले बिंदु, और फिर वाई अक्ष)। इस बिंदु को देखते हुए, मैं एक जेड वैल्यू की गणना करने का एक तरीका चाहता हूं जो 4 नमूना बिंदुओं के बीच इंटरपोलेट करता है।

बेशक एल्गोरिदम, 4 नमूना बिंदुओं में से किसी एक की एक्स, वाई स्थिति को देखते हुए, उस बिंदु के लिए जेड मान आउटपुट करना चाहिए। ध्यान दें कि 4 नमूना अंक कम हो सकते हैं।

मुझे लगता है कि 4 नमूना बिंदुओं के लिए जेड मानों के कुछ फ़ंक्शन, किसी भी तरह से नमूना बिंदु की दूरी से विपरीत रूप से पक्षपातपूर्ण है, लेकिन मैं यह नहीं समझ सकता कि यह कैसे करें।

किसी को भी ऐसा करने के लिए एक आसान तरीका के बारे में कोई विचार है?

उत्तर

9

आप कैटमुल-रोम स्प्लिंस से पैच बनाने के द्वारा ऐसा कर सकते हैं। ये splines प्रत्येक नियंत्रण बिंदु मारा जाएगा और वे पहले व्युत्पन्न (हालांकि दूसरा नहीं) में निरंतर हैं। मैं उन्हें काम करने के लिए बेहद आसान भी ढूंढता हूं। गणित सरल है और वे नियंत्रण बिंदुओं में मामूली परिवर्तन के साथ सहजता से व्यवहार करते हैं।

उच्चतम स्तर पर, आपको 16 अंक प्रति पैच (अपने डेटासेट के किनारे पर) की आवश्यकता होगी, आप उसी स्पिन में दो बार कोने और किनारे बिंदुओं का उपयोग कर सकते हैं)।

पहले, आप अपने 4x4 मैट्रिक्स में प्रत्येक पंक्ति में अंक p [मैं] [जे] भर अंतर्वेशन करने के लिए चार मध्यवर्ती नियंत्रण बिंदुओं क्ष [i] का एक सेट बनाने की आवश्यकता होगी। मेरा मतलब है कि यहां एक मोटा ASCII स्केच है।

p00 p01 q0 p02 p03 
p10 p11 q1 p12 p13 
p20 p21 q2 p22 p23 
p30 p31 q3 p32 p33 

अब आप अपने सतह पर एक अंतिम splined बिंदु को खोजने के लिए उन चार मध्यवर्ती नियंत्रण बिंदुओं में से प्रत्येक के बीच अंतर्वेशन सकते हैं।

Here is a construction of the Catmull-Rom spline चार बिंदुओं में। इस उदाहरण में, आप अंक के बीच interpolating रहे p [i-1] और पी [i], पर दोनों ओर पी नियंत्रण बिंदुओं का उपयोग [i-2] और p [i + 1]u इंटरपोलेशन कारक शून्य से एक तक है। τ को स्पलीन पर तनाव के रूप में परिभाषित किया गया है और इससे प्रभावित होगा कि आपकी विभाजित सतह आपके नियंत्रण बिंदुओं के अनुरूप कितनी कड़ाई से है।

    | 0 1 0 0 | | p[i−2] | 
       |−τ 0 τ 0 | | p[i−1] | 
p(u) = 1 u u2 u3 | 2τ τ−3 3−2τ −τ | | p[i] | 
       |−τ 2−τ τ−2 τ | | p[i+1] | 

नोट: यह कैसे Stackoverflow के जीयूआई में इस बाहर रखना लेकिन u2 और U3प्रतिनिधित्व करने के लिए यू चुकता और यू क्रमशः cubed, अपेक्षा की जाती है तुरंत स्पष्ट नहीं है।

0

उपयोग Catmull-ROM पैच

4

आप द्विरेखीय/bicubic प्रक्षेप का उपयोग कर सकते हैं लेकिन तीन दिशाओं (तीन-रैखिक/tricubic, क्रमशः) में। यदि आप समझते हैं कि इंटरपोलेशन के इन रूपों का काम कैसे होता है तो यह काफी मामूली है। अधिक जानकारी के लिए Tricubic Interpolation on Wikipedia देखें।

+0

इसे त्रिलिनर इंटरपोलेशन कहा जाता है। http://en.wikipedia.org/wiki/Trilinear_interpolation – ypnos

0

आप उस बिंदु का एक सरल रैखिक प्रक्षेप चाहते हैं, तो केंद्र बिंदु के Z मूल्य सिर्फ 4 पड़ोसी जेड मूल्यों का मतलब, यह देखते हुए दूरी दोनों Y में सममित हैं और एक्स है

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

तो Zc होगा: Zc = (Zx1 + x * (ZX2-Zx1)/(x2-x1) + Zy1 + y * (Zy2-Zy1)/(y2-y1))/2, x और वाई x1 और y1 से दूरी हैं।

1

क्या आप एक सतह इंटरपोलेशन की तलाश में हैं या एक ग्रिड पर्याप्त होगा?

एक सतह प्रक्षेप मुझे लगता है कि अन्य triangulations का उपयोग कर सुझाव दिया है (उदाहरण के लिए इस का उपयोग करें: http://en.wikipedia.org/wiki/Delaunay_triangulation)

एक ग्रिड बनाने के लिए: अपने सहयोगियों में से एक गर्मी समीकरण (http://en.wikipedia.org/wiki/Heat_equation) का इस्तेमाल किया पिक्सल के लिए मूल्यों की गणना करने के लिए दिए गए नमूना बिंदुओं के बाहर। इसने बेहद यथार्थवादी दिखने वाले इलाके की सतहों का उत्पादन किया, और समानांतरता के लिए यह मामूली था।

+0

गर्मी समीकरण चीज बहुत बढ़िया है! – zionpi

0

प्रश्न में सुझाए गए योजना का उपयोग करते हुए एक समस्या का सामना करते समय समस्या, जिसमें निकटतम पड़ोसियों के कुछ उप-समूह को बिखरे हुए सेट से चुना जाता है, यह परिणाम निरंतर नहीं होना चाहिए।

इसके बारे में सोचो। मान लीजिए कि मैं (एक्स, वाई) विमान के माध्यम से कुछ चिकनी, निरंतर पथ के साथ आगे बढ़ना था। जब तक 4 निकटतम पड़ोसियों में परिवर्तन नहीं होता है, तब तक इंटरपोलेंट चिकनी होगा, परिभाषित किया गया है, हालांकि आपने ऐसा करना चुना है। हालांकि, किसी बिंदु पर, निकटतम पड़ोसियों का वह सबसेट अचानक बदल जाएगा। उस बिंदु पर, आपके पास सीमा पार समांतर इंटरपोलेंट होना चाहिए। स्वतंत्र परिवर्तनीय सेट के त्रिभुज का उपयोग करना सबसे अच्छा है। यह डेटा के उत्तल हॉल के भीतर एक निरंतर (रैखिक) इंटरपोलेंट का आश्वासन देता है। अधिक काम के साथ, त्रिभुज के साथ उच्च आदेश इंटरपोलेशन भी हासिल किया जा सकता है।

यदि आप भूगर्भ विज्ञान में होते हैं, तो रेडियल आधार कार्यों का भी आमतौर पर इंटरपोलेशन, या क्रिगिंग के लिए उपयोग किया जाता है। चूंकि आप दूरी आधारित तरीकों की तलाश में थे, रेडियल आधार कार्यों पर विचार करें। उदाहरण के लिए, "व्यस्त मल्टीक्वाड्रिक इंटरपोलेशन" की खोज करें।

संबंधित मुद्दे