【计算几何】最大土地面积

该博客介绍了如何运用Graham算法和旋转卡壳算法解决计算几何中的一个问题,即找出一组点中形成的最大土地面积。首先通过Graham算法获取凸包,然后枚举点并找到其对踵点,再用旋转卡壳法确定对踵点对,最后计算以这些点为对角线的四边形中面积最大的一个。
Description
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。
Input
第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。
Output
最大的多边形面积,答案精确到小数点后3位。
Sample Input
5
0 0
1 0
1 1
0 1
0.5 0.5
Sample Output
1.000

此题考察Graham算法和旋转卡壳算法。

首先用Graham求出凸包,然后枚举点A,用旋转卡壳法求出它的对踵点B,再用旋转卡壳法求出关于AB两点的对踵点CD,取所有的以AB和CD为对角线的四边形中面积最大的一个,即为所求的结果。
时间复杂度O(n)。

Accode:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>

using std::complex;
const char fi[] = "area.in";
const char fo[] = "area.out";
const int maxN = 2010;
const int MAX = 0x3f3f3f3f;
const int MIN = ~MAX;
const double zero = 1e-12;

typedef complex <double> vec;
vec p[maxN];
vec res[maxN];
int n, top = 1;

void init_file()
{
    freopen(fi, "r", stdin);
    freopen(fo, "w", 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值