【中兴笔试题】三角形面积

这里写图片描述

解题思路

这里先补充几个公式:

  • 余弦定理: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));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值