मेरे पास बहुभुज है जिसमें बहुत से अंक हैं। मैं बहुभुज और एक सर्कल का चौराहे खोजना चाहता हूं। [X0, y0] और आर 0 के त्रिज्या के सर्कल केंद्र प्रदान करते हुए, मैंने सर्कल के चौकोर समीकरण को हल करने के लिए एक मोटा कार्य लिखा है और एक रेखा। लेकिन पॉलीगॉन के प्रत्येक लाइन सेगमेंट के छेड़छाड़ को एक-एक करके खोजने की दक्षता के बारे में क्या? क्या कोई और कुशल तरीका है?लाइन के चौराहे और पायथन में एक सर्कल खोजने का सबसे प्रभावी तरीका क्या है?
मुझे पता है कि sympy पहले से ही विभिन्न ज्यामिति के चौराहे पाने के लिए सुविधा प्रदान करता है। लेकिन बाहरी लाइब्रेरी की दक्षता के बारे में क्या है, जैसे कि सिम्पी अपने स्वयं के फ़ंक्शन द्वारा गणना करने की तुलना में, यदि मैं बहुत सारे बहुभुजों से निपटना चाहता हूं?
def LineIntersectCircle(p,lsp,lep):
# p is the circle parameter, lsp and lep is the two end of the line
x0,y0,r0 = p
x1,y1 = lsp
x2,y2 = esp
if x1 == x2:
if abs(r0) >= abs(x1 - x0):
p1 = x1, y0 - sqrt(r0**2 - (x1-x0)**2)
p2 = x1, y0 + sqrt(r0**2 - (x1-x0)**2)
inp = [p1,p2]
# select the points lie on the line segment
inp = [p for p in inp if p[1]>=min(y1,y2) and p[1]<=max(y1,y2)]
else:
inp = []
else:
k = (y1 - y2)/(x1 - x2)
b0 = y1 - k*x1
a = k**2 + 1
b = 2*k*(b0 - y0) - 2*x0
c = (b0 - y0)**2 + x0**2 - r0**2
delta = b**2 - 4*a*c
if delta >= 0:
p1x = (-b - sqrt(delta))/(2*a)
p2x = (-b + sqrt(delta))/(2*a)
p1y = k*x1 + b0
p2y = k*x2 + b0
inp = [[p1x,p1y],[p2x,p2y]]
# select the points lie on the line segment
inp = [p for p in inp if p[0]>=min(x1,x2) and p[0]<=max(x1,x2)]
else:
inp = []
return inp
मुझे लगता है कि आप पूरे पंक्ति के साथ सर्कल के चौराहे पर विचार करते हैं, न केवल दो दिए गए बिंदुओं के बीच रेखा खंड। क्या ये वही है जो तुम चाहते हो? –
एकमात्र संभावित अनुकूलन जिसे मैं सोच सकता हूं इसमें किसी प्रकार के स्थानिक विभाजन का उपयोग शामिल है। जैसे एक चौकोर पेड़ लेकिन इनका कंप्यूटिंग में जुड़ी गैर-तुच्छ लागत है, इसलिए यह उपयोगी है या नहीं, तो यह आपकी बड़ी समस्या पर निर्भर करता है। – deets
@ EmanuelePaolini, धन्यवाद। मैंने आपकी चिंता के अनुसार स्क्रिप्ट को संशोधित किया है। – xibinke