当前位置: 代码迷 >> 综合 >> 紫书 习题 10-3 UVa 1643(计算几何 叉乘)
  详细解决方案

紫书 习题 10-3 UVa 1643(计算几何 叉乘)

热度:89   发布时间:2023-09-20 20:38:45.0

直观感觉对角线重合的时候面积最大

然后可以根据方程和割补算出阴影部分的面积

注意知道两点坐标,可以求出与原点形成的三角形的面积

用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积

所以用叉乘除以2就可以

(x1, y1), (x2, y2),叉乘为x1y2-y1x2

#include<cstdio>
#include<cmath>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;int main()
{int n;while(~scanf("%d", &n) && n){double xa, xb, ya, yb, k1, k2;scanf("%lf%lf%lf%lf", &xa, &ya, &xb, &yb);k1 = ya / xa, k2 = yb / xb;if(k1 > k2) swap(k1, k2);double L = 0, l, sum = 0;REP(i, 0, n){scanf("%lf", &l);L += l;sum += l * l / 2;}double x1 = (k1 + 1) / (k2 - k1) * L;double x2 = (k2 + 1) / (k2 - k1) * L;double y1 = k1 * x1, y2 = k2 * x2;printf("%.3lf\n", (x1 * y2 - x2 * y1) / 2 - sum);}return 0;
}