题目大意
给定一个
M
个面
数据范围
N,M≤100
题解
这道题考了很多结论,所以我考场上根本不会做。。
首先我们需要求出凸多面体的重心。假如这个凸多面体是一个四面体,那么其重心的坐标就是所有点的坐标的均值。因此,我们可以考虑将原来的凸多面体剖分为若干个四面体来求。我们可以在凸多面体内随便选一个点,实际中用端点比较方便。然后对于每个面,我们可以对其三角剖分,每个三角形与选定的点就形成了四面体。设
Vi
表示第
i
个四面体的体积,
O=∑iVi∗Oi∑iVi
要求四面体的体积,我们可以先用混合积求出平行六面体的体积再除以6就好了。
接下来我们就需要对于每个面求出其对应的球面的面积。
假设当前面为一个三角形,那么这个三角形在球上的投影必然是一个球三角形。
比如说这幅图:
A,B,C
为对应的三个投影点的内角,
a,b,c
为三条边,边是圆弧。那么根据wikipedia上的公式,我们有:
SΔ=A+B+C−π
cos(c)=cos(a)cos(b)+sin(a)sin(b)cos(C)
,其他同理。
那么现在的问题就是如何求cos(a),cos(b),cos(c)。
因为我们已经知道了重心到三个点的向量,那么我们可以直接点积一下再反三角就可以得到
a,b,c
了,那么这个三角形的面积就知道了。
假如一个面不是三角形,那么我们一样可以对其三角剖分,问题就被解决了。
时间复杂度为
O(N)
。