已知多边形的顶点坐标(x,y),求多边形的面积

package 计算多边形的面积;

public class 计算多边形的面积 {
    public static void main(String[] args) {
        System.out.println(calcuArea(new double[]{0, 0, 1, 1}, new double[]{0, 1, 1, 0}));
    }

    public static double calcuArea(double[] xs, double[] ys) {
        int n = xs.length;
        double area = 0;
        for(int i = 0; i < n; i++) {
            area += xs[i % n] * ys[(i + 1) % n] - xs[(i + 1) % n] * ys[i % n];
        }
        return 0.5 * Math.abs(area);
    }
}

上述代码为已知一个多边形的各个顶点的坐标(x,y),求取多边形面积的java代码。

基本的原理很简单,我们用简单的三角形的情况来理解,如下图所示
已经知道的多边形的三点为ABC,在平面上任取一点O(一般将O取为坐标原点)。如果利用向量的叉乘运算(|xx|代表向量的长度)
OA 叉乘 OB = |OA|×|OB|×Sin∠AOB
刚好是三角形OAB面积的两倍,但是这里需要注意计算出来的值可能是负值,因为叉乘的顺序OA叉乘OB 与 OB叉乘OA的结果是不一样的,互为相反数,因为旋转的方向不一样,不清楚的可以去查阅数学书,在这里刚好需要利用到这个特性。
计算:
OA 叉乘 OB + OB 叉乘 OC + OC叉乘OA
值刚好是三角形ABC面积的两倍(先忽略掉符号问题),为什么呢,因为这样叉乘绕一圈以后,刚好可以将三角形OAB中多出的OBC 和 OAC部分去除,为什么呢,因为叉乘旋转的方向不一样,导致 OA 叉乘 OB 与OB 叉乘 OC 和 OC叉乘OA的符号一定不一样, 加起来刚好就去除了。
所以最后,将 OA 叉乘 OB + OB 叉乘 OC + OC叉乘OA 取绝对值再除以2,就是我们要求的面积了。
用上述的思想,可以很容易的推广到任意的多边形上。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值