描述:
给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。 多边形被放置在一个 X-Y 的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。第一行给出多边形的顶点数 n(n≤100) 。接下来的几行每行给出多边形一个顶点的坐标值 X 和 Y (都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值 -200≤x,y≤200 。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。
代码实现:
C/C++实现:
/* 计算多边形面积 */
#include <stdio.h>
int main()
{
int vertex_num; // 顶点数
int x[100], y[100]; // 顶点坐标
double area = 0;
scanf("%d", &vertex_num);
for (int i = 0; i < vertex_num; i++)
{
scanf("%d %d", &x[i], &y[i]);
}
// 计算多边形面积
for (int i = 0; i < vertex_num; i++)
{
int j = (i + 1) % vertex_num; // 当前顶点下一个顶点的编号
area += (x[i] * y[j] - x[j] * y[i]) / 2;
}
printf("%.1lf\n", fabs(area));
return 0;
}
JAVA实现:
import java.util.Scanner;
public class PolygonArea {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 读入多边形顶点数
int vertexNum = sc.nextInt();
// 读入多边形顶点坐标
int[][] vertexCoordinates = new int[vertexNum][2];
for (int i = 0; i < vertexNum; i++) {
vertexCoordinates[i][0] = sc.nextInt();
vertexCoordinates[i][1] = sc.nextInt();
}
// 计算多边形面积
double area = 0;
for (int i = 0; i < vertexNum; i++) {
int j = (i + 1) % vertexNum; // 当前顶点下一个顶点的编号
area += (vertexCoordinates[i][0] * vertexCoordinates[j][1] - vertexCoordinates[j][0] * vertexCoordinates[i][1]) / 2.0;
}
System.out.printf("%.1f", Math.abs(area));
}
}
Python实现:
# 计算多边形面积
vertex_num = int(input()) # 读入多边形顶点数
# 读入多边形顶点坐标
vertex_coordinates = []
for i in range(vertex_num):
x, y = map(int, input().split())
vertex_coordinates.append((x, y))
# 计算多边形面积
area = 0
for i in range(vertex_num):
j = (i + 1) % vertex_num # 当前顶点下一个顶点的编号
area += (vertex_coordinates[i][0] * vertex_coordinates[j][1] - vertex_coordinates[j][0] * vertex_coordinates[i][1]) / 2
print(abs(area))