题目:
给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。 多边形被放置在一个 X-Y 的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。 然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)
输入描述: 第一行给出多边形的顶点数 n(n≤100) 。接下来的几行每行给出多边形一个顶点的坐标值 X 和 Y (都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。 并且多边形的每一个顶点的坐标值 -200≤x,y≤200 。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。
输出描述: 一个整数,表示多边形的面积。
示例 示例1 输入 10 0 0 4 0 4 1 3 1 3 3 2 3 2 2 1 2 1 3 0 3 输出 9
示例2 输入 10 0 0 1 0 1 5 2 5 2 2 4 2 4 3 6 3 6 6 0 6 输出 21
代码
public class duobianxing1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str_0 = scan.nextLine().trim();
int n = Integer.parseInt(str_0);
ArrayList<ArrayList<Integer>> vector = new ArrayList<>();
for (int i = 0; i < n; i++) {
String str_1 = scan.nextLine();
String[] line_list_1 = str_1.trim().split(" ");
ArrayList<Integer> temp_1 = new ArrayList<>();
for (int j = 0; j < line_list_1.length; j++) {
temp_1.add(Integer.parseInt(line_list_1[j]));
}
vector.add(temp_1);
}
scan.close();
int result = solution(n, vector);
System.out.println(result);
}
public static int solution(int n, ArrayList<ArrayList<Integer>> vector) {
int result = 0,j;
// TODO: 请在此编写代码 简写
for(int i=0;i<n;i++){
j=(i+1)%n;
result += vector.get(i).get(0)*vector.get(j).get(1)-vector.get(j).get(0)*vector.get(i).get(1);
}
return Math.abs(result)/2;
}
}
面积公式找到了
找某个大神证明公式(竖着看)