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

来源:互联网 发布:北京我知科技有限公司 编辑:程序博客网 时间:2024/06/04 20:48

这里写图片描述

解题思路

这里先补充几个公式:

  • 余弦定理: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));    }}
原创粉丝点击