解题思路
这里先补充几个公式:
- 余弦定理:a²=b²+c²-2bc*cosA
- 三角形面积公式:S=1/2absinC=1/2acsinB=1/2bcsinA
三角形面积分三种情况
- 第一种相离
- 第二种包含
- 第三种相交
import java.math.BigDecimal;
public class Solution {
final double PI = 3.1415926;
public double fun(int firstX, int firstY, int firstR, int secondX, int secondY, int secondR) {
double ans = 0.0;
double distance = Math.sqrt((firstX - secondX) * (firstX - secondX) + (firstY - secondY) * (firstY - secondY));
// 相离
if (firstR + secondR < distance)
return 0.0;
// 内含
else if (Math.abs(secondR - firstR) >= distance) {
if (secondR >= firstR)
ans = PI * firstR * firstR;
else
ans = PI * secondR * secondR;
}
// 相交
else {
double angle1 = 2 * Math
.acos((firstR * firstR + distance * distance - secondR * secondR) / (2.0 * firstR * distance));
double angle2 = 2 * Math
.acos((secondR * secondR + distance * distance - firstR * firstR) / (2.0 * secondR * distance));
ans = firstR * firstR * angle1 / 2.0 + secondR * secondR * angle2 / 2.0
- firstR * firstR * Math.sin(angle1) / 2.0 - secondR * secondR * Math.sin(angle2) / 2.0;
}
BigDecimal bg = new BigDecimal(ans);
ans = bg.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
return ans;
}
public static void main(String[] args) {
System.out.println(new Solution().fun(0, 0, 1, 0, 1, 1));
}
}