पायथन में एक बिंदु और एक बाइबिक स्पलीन सतह के बीच की दूरी के लिए मुझे तेजी से अनुमान कैसे मिल सकता है? क्या कोई मौजूदा समाधान है जिसे मैं साइपी, न्यूपी, या कुछ अन्य पैकेज में लाभ उठा सकता हूं?पायथन में एक बिंदु और एक बाइबिक स्पलीन सतह के बीच की दूरी के लिए मुझे तेजी से अनुमान कैसे मिल सकता है?
मैं सतह इस के रूप में एक bicubic प्रक्षेप द्वारा परिभाषित किया गया है:
import numpy as np
import scipy.interpolate
# Define regular grid surface
xmin,xmax,ymin,ymax = 25, 125, -50, 50
x = np.linspace(xmin,xmax, 201)
y = np.linspace(ymin,ymax, 201)
xx, yy = np.meshgrid(x, y)
z_ideal = (xx**2 + yy**2)/400
z_ideal += z_ideal + np.random.uniform(-0.5, 0.5, z_ideal.shape)
s_ideal = scipy.interpolate.interp2d(x, y, z_ideal, kind='cubic')
और मुझे लगता है कि सतह के कुछ मापा अंक मिल गया है:
# Fake some measured points on the surface
z_measured = z_ideal + np.random.uniform(-0.1, 0.1, z_ideal.shape)
s_measured = scipy.interpolate.interp2d(x, y, z_measured, kind='cubic')
p_x = np.random.uniform(xmin,xmax,10000)
p_y = np.random.uniform(ymin,ymax,10000)
p_z = s_measured(p_x, p_y)
मैं निकटतम लगाना चाहते हैं p
में प्रत्येक बिंदु पर सतह s_ideal
पर इंगित करें। एक सामान्य मामले में जंगली रूप से भिन्न splines के लिए कई समाधान हो सकते हैं, इसलिए मैं समस्या को उन सतहों तक सीमित कर रहा हूं जिन्हें ज़ेड के साथ बिंदु के प्रक्षेपण के आसपास के केवल एक समाधान के लिए जाना जाता है। यह माप या सतह परिभाषा बिंदुओं की एक छोटी संख्या नहीं है, इसलिए मैं 1E-5
पर सटीकता की कीमत पर भी गति को अनुकूलित करना चाहता हूं।
- उपयोग
pt = [p_x, p_y, p_z]
प्रारंभिक परीक्षण बिंदु के रूप में, जहांp_z = s_ideal(pt)
- ढलान की गणना (:
विधि जो मन में आता एक ढाल वंश दृष्टिकोण का उपयोग और प्रत्येक माप बिंदु
p
के लिए की तरह कुछ करने के लिए है स्पर्श) वेक्टरm = [ m_x, m_y ]
pt
- में से वेक्टर
r
की गणनाpt
p
रहे हैं:r = p - pt
012,
- यदि कोण
theta
r
औरm
के बीच 90 डिग्री की कुछ सीमा के भीतर है, तोpt
अंतिम बिंदु है। - अन्यथा, अद्यतन
pt
के रूप में:
r_len = numpy.linalg.norm(r)
dx = r_len * m_x
dy = r_len * m_y
if theta > 90:
pt = [ p_x + dx, p_y + dy ]
else:
pt = [ p_x - dx, p_y - dy ]
मैं एक विधि -1 डी मामले के लिए एक बहुत ही उच्च सटीकता के लिए तेजी से परिणाम उत्पादन कर सकता का सुझाव दे this मिला, लेकिन यह एक भी आयाम के लिए है और मेरे लिए दो में परिवर्तित होना बहुत कठिन हो सकता है।
मैं इस समस्या का हल नहीं लगता। 'p_z' आदर्श समाधान नहीं है, यह ज़ेड में सतह पर बिंदु का प्रक्षेपण है। सतह पर निकटतम बिंदु 'Ps' किसी दिए गए बिंदु' पी 'के लिए होगा, जिसकी सतह सामान्य वेक्टर' पी 'से गुज़रती है '। प्रत्येक टेस्ट पॉइंट के परिणामस्वरूप निकटतम सतह बिंदु होना चाहिए, इसलिए क्लस्टरिंग उस उद्देश्य को पूरा नहीं करती है। – Brian