任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。
矢量面积=三角形两边矢量的叉乘。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad4b0cbc427a44b093e046f06d222c1d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT2xpdmVyMjE=,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center)
按定理,多边形面积由P点与A-G的各顶点连接所构成的三角形矢量面积构成,假定多边形顶点坐标顺序为A-G,逆时针为正方向,则有如下结论:
PAB,PBC,PCD均为顺时针,面积为负;
PDE,PEF,PFG,PGA均未逆时针,面积为正;
但无论正负,均可通过P点与顶点连线的矢量叉乘完成,叉乘结果中已包含面积的正负。
point.class模拟坐标点
class Point{
private int x;
private int y;
}
方法
public void getArea(List<Point> objects){
int i, j;
int area = 0;
for (i = 0; i < objects.size(); i++)
{
j = (i + 1) % objects.size();
area += objects.get(i).getX() * objects.get(j).getY();
area -= objects.get(i).getY() * objects.get(j).getX();
}
area /= 2;
System.out.println(Math.abs(area));
}
测试
@Test
public void test() {
Point x = new Point();
x.setX(100);
x.setY(100);
Point x1 = new Point();
x1.setX(100);
x1.setY(300);
Point x2 = new Point();
x2.setX(200);
x2.setY(300);
Point x3 = new Point();
x3.setX(200);
x3.setY(100);
List<Point> objects = new ArrayList<>();
objects.add(x);
objects.add(x1);
objects.add(x2);
objects.add(x3);
getArea(objects);
}
结果
参考连接