में एक सर्कल में काटते हुए भाग का आकार पाने के लिए मैं इस छवि के काले भाग का आकार की जरूरत है:
जावा
के बारे में मैं बहुत शोध किया है कि कैसे सामान्य गणित में यह पता लगाने के लिए Website
हो रही यह pict http://mathworld.wolfram.com/images/equations/Circle-CircleIntersection/Inline41.gif
जहां r पहला वृत्त की त्रिज्या है था पर अंतिम जवाब, आर दूसरा वृत्त की त्रिज्या, और बीच की दूरी डी: है, और मैं इस वेबसाइट की ओर इशारा किया गया था दो केंद्र
कोड मैं इस के आकार पाने के लिए उपयोग करने के लिए करने की कोशिश की निम्नलिखित था:
float r = getRadius1();
float R = e.getRadius1();
float deltaX = Math.abs((getX() + getRadius()) - (e.getX() + e.getRadius()));
float deltaY = Math.abs((getY() + getRadius()) - (e.getY() + e.getRadius()));
float d = (float) Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
float part, part2, part3;
//Chopping it in parts, because it's easier.
part = (float) (Math.pow(r,2) * Math.acos(
Math.toRadians((Math.pow(d, 2) + Math.pow(r, 2) - Math.pow(R, 2))/(2*d*r))));
part2 = (float) (Math.pow(R,2) * Math.acos(
Math.toRadians((Math.pow(d, 2) + Math.pow(R, 2) - Math.pow(r, 2))/(2*d*R))));
part3 = (float) (0.5 * Math.sqrt((-d + r + R) * (d+r-R) * (d-r+R) * (d+r+R)));
float res = part + part2 - part3;
Main.log(res + " " + part + " " + part2 + " " + part3+ " "
+ r + " " + R + " " + d);
//logs the data and System.out's it
मैं कुछ परीक्षण किया था, और उत्पादन इस था:
1345.9663 621.6233 971.1231 246.78008 20.0 25.0 43.528286
ताकि जो इंगित करता है ओवरलैपिंग भाग का आकार सर्कल से बड़ा था (जो r^2 * PI
है)।
मैंने क्या गलत किया?
मैं 'फ्लोट' के बजाय 'डबल' का उपयोग करूंगा क्योंकि इसमें कम प्रतिनिधित्व त्रुटि होगी, लेकिन आपकी व्याख्या करने के लिए पर्याप्त नहीं है। ;) –
क्या आप हमें डेल्टाएक्स और वाई के लिए सूत्र दिखा सकते हैं क्योंकि वे सही नहीं दिख रहे हैं? GetRadius() और getRadius1() के बीच क्या अंतर है? –
आपको Radius1() और e.getRadius1() क्यों मिलता है? क्या आप आर के त्रिज्या को भूलना भूल रहे हैं? – Max