Java 根据多边形坐标点 计算多边形面积

请仔细阅读代码注释(有肯多坑,跟着注释走没问题) 亲测有效 

/**
 * 计算多边形面积公式
 *
 * @author Lion Li
 * @date 2020-05-19
 */
public class PolygonArea {

    public static void main(String[] args) {

        //多边形面积
        double sum = 0;

        //临时变量
        double xTmp = 0;
        double yTmp = 0;

        //无论从哪开始第一个坐标的x,y必须是0,0 如果不从0,0 那么会出现误差
        double xFirst = 0.0;
        double yFirst = 0.0;
        // 坐标必须封闭 从哪开始 到哪结束
        String[] arrs = {"10,10", "40,10", "40,40", "10,40", "10,10"};
        for (String s : arrs) {
            // 读取当前坐标的x和y
            String[] arr = s.split(",");
            double xCurrent = Double.parseDouble(arr[0]);
            double yCurrent = Double.parseDouble(arr[1]);

            /**
             * 计算面积:
             * (xTmp,yTmp)代表上一行的坐标值
             * (xCurrent,yCurrent)代表当前这一行的坐标值
             */
             // 公式 sum += ((xTmp - xCurrent) * (yTmp + yCurrent)) * 0.5;
             BigDecimal sub = new BigDecimal(xTmp).subtract(new BigDecimal(xCurrent));
             BigDecimal add = new BigDecimal(yTmp).add(new BigDecimal(yCurrent));
             BigDecimal mul = sub.multiply(add).multiply(new BigDecimal("0.5"));
             sum = mul.add(new BigDecimal(sum)).doubleValue();

             //计算完面积后,进入下一次循环前需要将“当前坐标”交换为“上一行的坐标”
             xTmp = xCurrent;
             yTmp = yCurrent;
        }
        //用最后读取的坐标与第一次读取的坐标进行一次面积运算
        BigDecimal sub = new BigDecimal(xTmp).subtract(new BigDecimal(xFirst));
        BigDecimal add = new BigDecimal(yTmp).add(new BigDecimal(yFirst));
        BigDecimal mul = sub.multiply(add).multiply(new BigDecimal("0.5"));
        sum = mul.add(new BigDecimal(sum)).doubleValue();
        
        System.out.println(sum);
    }
}

计算 10,10  40,10  40,40  10,40 的面积

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的狮子Li

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值