nyoj-1011-So Easy[II] (多边形面积求解)

本文介绍了一种通过叉乘计算多边形面积的方法,并提供了一个C++实现示例。该方法从多边形的第一个顶点开始,将其分割成多个三角形,然后计算每个三角形的面积并累加。

题目链接

 1 /*
 2     Name:nyoj-1011-So Easy[II] 
 3     Copyright:
 4     Author:
 5     Date: 2018/4/26 17:12:09
 6     Description:
 7     将多边形,从第一个顶点出发,分为若干个小的三角形
 8     通过叉乘计算三角形面积 
 9 */
10 #include <cstring>
11 #include <iostream>
12 #include <cstdio>
13 #include <cmath>
14 using namespace std;
15 struct node{
16     double x ,y;
17 } arr[105];
18 double cross(node a,node b1,node b2){//求(b1-a) 和(b2-a) 的叉乘 
19     double x1,y1,x2,y2;
20     x1=b1.x-a.x;
21     y1=b1.y-a.y;
22     x2=b2.x-a.x;
23     y2=b2.y-a.y;   
24     return x1*y2-x2*y1;
25 }
26 int main()
27 {
28     int n;
29     while (cin>>n) {
30         memset(arr, 0, sizeof(arr));
31         for (int i=0; i<n; i++) {
32             cin>>arr[i].x>>arr[i].y;
33         }
34         double area = 0;
35         for (int i=2; i<n; i++) {
36             area += cross(arr[0], arr[i-1], arr[i]) /2.0;
37         }
38         printf("%.2lf\n", fabs(area));//只能在最后加上绝对值,计算过程中可能出现负的 
39     }
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/evidd/p/8954006.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值