को देखते हुए दो हलकों:चौराहे के क्षेत्र दो के बीच मंडलियां
- (
x1
,y1
) परradius1
- सी 2 के साथ (
x2
,y2
) परradius2
साथ सी 1 कैसे आप की गणना करना उनके चौराहे का क्षेत्र? सभी मानक गणित कार्य (sin
, cos
, आदि) निश्चित रूप से उपलब्ध हैं।
को देखते हुए दो हलकों:चौराहे के क्षेत्र दो के बीच मंडलियां
x1
, y1
) पर radius1
x2
, y2
) पर radius2
साथ सी 1 कैसे आप की गणना करना उनके चौराहे का क्षेत्र? सभी मानक गणित कार्य (sin
, cos
, आदि) निश्चित रूप से उपलब्ध हैं।
ठीक है, समीकरण 14 को देखने के लिए Wolfram लिंक और मिथ्या नाम के क्यू का उपयोग कर, मैं निम्नलिखित जावा समाधान चर मैं सूचीबद्ध और केन्द्रों के बीच की दूरी का उपयोग कर ली गई है (जो तुच्छता से उन लोगों से प्राप्त किया जा सकता):
Double r = radius1;
Double R = radius2;
Double d = distance;
if(R < r){
// swap
r = radius2;
R = radius1;
}
Double part1 = r*r*Math.acos((d*d + r*r - R*R)/(2*d*r));
Double part2 = R*R*Math.acos((d*d + R*R - r*r)/(2*d*R));
Double part3 = 0.5*Math.sqrt((-d+r+R)*(d+r-R)*(d-r+R)*(d+r+R));
Double intersectionArea = part1 + part2 - part3;
मेटा में अपना मेटा-नोट पोस्ट करें http://meta.stackoverflow.com/ –
हाँ, मैंने वहां जांच की है और पहले से ही एक धागा है जहां आधिकारिक तौर पर उत्तर दिया गया जवाब यह है कि वापस आना और अपने प्रश्न का उत्तर देना अच्छा है । लेकिन ऐसा लगता है कि ज्यादातर SO उपयोगकर्ता वास्तव में उस नीति का पालन नहीं करते हैं। Misnomer के लिए कोई अपराध नहीं है और मैं उसकी मदद करने की कोशिश कर उसकी सराहना करता हूं। लेकिन, अभी, मुझे एक लिंक देने के लिए 3 अप-वोट हैं जो मुझे पोस्ट करने से पहले ही पता था। मैंने उस लिंक में जानकारी को कोड में अनुवाद करने का कड़ी मेहनत की है और केवल 1 अप-वोट है। मैंने इस तरह के भीड़ व्यवहार को बार-बार देखा है और यह मुझे परेशान करता है। –
@ क्रिस..क्या तुमने मेरा जवाब कम कर दिया क्योंकि ... आप चाहते थे कि तुम्हारा अधिक उत्साह हो .. अब वह मुझे परेशान करता है..मैं तुम्हारी बात पर बहस नहीं करूंगा..क्योंकि यह मेरे अनुसार मूर्खतापूर्ण है .. ।जो भी हो..अगली बार डाउनवॉट्स को समझाते हुए कम से कम एक टिप्पणी छोड़ दें .. – Vishal
आप इस analytical solution को देखना और अपने इनपुट मान के साथ सूत्र लागू करना चाहते हैं।
एक और फॉर्मूला दिया here -
Area = r^2*(q - sin(q)) where q = 2*acos(c/2r),
where c = distance between centers and r is the common radius.
+1 पहले लिंक में फॉर्मूला का पूर्ण व्युत्पन्न है। दूसरा सर्कल का त्रिज्या समान होता है तो दूसरा उपयोगी होता है। – eaj
लिंक के लिए धन्यवाद। क्या कोई और सामान्य सूत्र है जिसे विशेष रूप से दिए गए चर (उदाहरण के लिए एक सामान्य त्रिज्या नहीं मानते) का उपयोग करके प्राप्त किया जा सकता है? –
ऐसा लगता है कि पहला लिंक ईक 14 आपको एक सामान्य समाधान देता है लेकिन मुझे यह देखने के लिए गणित को ब्रश करने की ज़रूरत है कि वास्तव में क्या हो रहा है ... आपको सर्कल के त्रिज्या से अधिक की आवश्यकता हो सकती है ताकि यह उपयोगी हो सके- http : //2000clicks.com/MathHelp/GeometryConicSectionCircleIntersection.aspx – Vishal
यहाँ एक जावास्क्रिप्ट समारोह है कि वास्तव में क्या क्रिस था के बाद:
function areaOfIntersection(x0, y0, r0, x1, y1, r1)
{
var rr0 = r0 * r0;
var rr1 = r1 * r1;
var d = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));
var phi = (Math.acos((rr0 + (d * d) - rr1)/(2 * r0 * d))) * 2;
var theta = (Math.acos((rr1 + (d * d) - rr0)/(2 * r1 * d))) * 2;
var area1 = 0.5 * theta * rr1 - 0.5 * rr1 * Math.sin(theta);
var area2 = 0.5 * phi * rr0 - 0.5 * rr0 * Math.sin(phi);
return area1 + area2;
}
हालांकि, यदि यह सर्कल दूसरे के अंदर पूरी तरह से है, तो वे इस विधि को नाइन वापस कर देंगे, या वे बिल्कुल छू रहे नहीं हैं।
function areaOfIntersection(x0, y0, r0, x1, y1, r1)
{
var rr0 = r0 * r0;
var rr1 = r1 * r1;
var d = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));
// Circles do not overlap
if (d > r1 + r0)
{
return 0;
}
// Circle1 is completely inside circle0
else if (d <= Math.abs(r0 - r1) && r0 >= r1)
{
// Return area of circle1
return Math.PI * rr1;
}
// Circle0 is completely inside circle1
else if (d <= Math.abs(r0 - r1) && r0 < r1)
{
// Return area of circle0
return Math.PI * rr0;
}
// Circles partially overlap
else
{
var phi = (Math.acos((rr0 + (d * d) - rr1)/(2 * r0 * d))) * 2;
var theta = (Math.acos((rr1 + (d * d) - rr0)/(2 * r1 * d))) * 2;
var area1 = 0.5 * theta * rr1 - 0.5 * rr1 * Math.sin(theta);
var area2 = 0.5 * phi * rr0 - 0.5 * rr0 * Math.sin(phi);
// Return area of intersection
return area1 + area2;
}
}
मैं जानकारी Math Forum में पाया पढ़कर इस समारोह ने लिखा है: एक थोड़ा अलग संस्करण है कि इन परिस्थितियों में विफल नहीं इस प्रकार है। मुझे Wolfram MathWorld स्पष्टीकरण से यह स्पष्ट मिला।
धन्यवाद - यह मेरी मदद करता है! संशोधित संस्करण ठीक वही था जो मैं बाद में था। – scipilot
यह उत्तर गलत है। मुझे पूरी तरह से यकीन नहीं है कि लॉजिकल बग कहां है, लेकिन यह कम से कम इन मामलों में विफल रहता है (जब आर 1 नीचे से 2 तक पहुंचता है): x0 = 0, y0 = 0, r0 = 1, x1 = 1, y0 = 0, r1 = 2। विशेष रूप से, आपका कोड क्षेत्र को पीआई के पास देता है, जब इसे पीआई/2 के पास आना चाहिए। – user1145925
@ user1145925, इनपुट x0 = 0, y0 = 0, r0 = 1, x1 = 1, y0 = 0, r1 = 2 पीआई का आउटपुट सही है क्योंकि सर्कल 0 में पीआई का क्षेत्र है, और पूरी तरह से सर्कल के भीतर निहित है 2। –
http://mathworld.wolfram.com/Circle-CircleIntersection.html –
धन्यवाद। मैं वास्तव में पोस्ट करने से पहले लिंक के बारे में पता था। मैं वास्तव में सूचीबद्ध चर का उपयोग कर एक विशिष्ट समीकरण की तलाश में था। –