题解转载于此
已知A、B、C、D、P1、P2的坐标与k1、k2的值,且
|AP1|>=k1*|BP1|,|CP2|>=k2*|DP2|,要求两个几何体的相交体积。
分析:
以A、B、P1为例,即(x-x0)^ 2+(y-y0)^ 2+(z-z0)^ 2>=k1^ 2*[(x-x1)^ 2+(y-y1)^ 2+(z-z1)^2],
即(k1* k1-1) * (x * x+y * y+z * z)-(2 * k1 * k1 * x1-2 * x0) * x-(2 * k1 * k1 * y1-2 * y0) * y-(2 * k1 * k1 * z1-2 * z0) * z+k1 * k1 * (x1 * x1+y1 * y1+z1 * z1)-x0 * x0-y0 * y0-z0 * z0<=0,故得该立体为一个球体。
由上面的推导公式,可以推出该球的圆心坐标和半径。
故题目转换为求两个球相交部分体积计算。
有现成公式,即V=Pi * (R * h * h-1/3 * h * h * h)。
此处的公式推导转载于此
代码如下:
#include <bits/stdc++.h>
#define INF 99999999
#define LINF LLONG_MAX
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MAX_N=1;
const double pi = acos(-1);
int T;
double x[5],y[5],z[5];
double k1,k2;
void solve(double x1,double y1,double z1,double r1,double x2,double y2,double z2,double r2){
double ans=0;
//球心距离
double dis=sqrt((x1-x2)*