AcWing 2119. 最佳包裹 (三维几何基础三维凸包)

三维凸包模板

增量算法 复杂度O(n^n)

枚举点集 每次看点与当前所有面的关系 Pr能照到的面删除 剩下的保留搭配np[]

再将交界处的边与Pr的连接面加入np[]

注意需要对数据微小扰动 防止存在四点共面

#include<cstring>
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>

using namespace std;
const int MaxN = 105;
const double eps = 1e-12;

int n,m;//多面体中n个点 m个边
bool vis[MaxN][MaxN];//vis[i][j]:P在i->j面的上面

double rand_eps(){//随机微小扰动 防止四点共面
	return ((double)rand() / RAND_MAX - 0.5) * eps;//[-0.5,0.5]*eps
}

struct Point{
	double x,y,z;
	void shake(){
		x += rand_eps();
		y += rand_eps();
		z += rand_eps();
	}
	double len(){
		return sqrt(x * x + y * y + z * z);
	}
	Point operator - (Point t){
		return {x - t.x,y - t.y,z - t.z};
	}

	double operator & (Point t){//点积
		return (x*t.x +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值