題意
求兩個球的體積並做法
用球缺公式+計算幾何模板即可解決。
球缺公式為:v=π
h2(3
r−h)
3v=\frac
v=3πh2
(3r−
h)其中r
rr是球的半徑,h
hh是球缺的高。
**
#include
#include
#include
#include
using
namespace std;
const
int maxn =
1e5+5;
typedef
double db;
const db pi =
acos(-
1);const db eps =
1e-10
;int
sgn(
double x)
typedef
struct point
point
(double a,
double b,
double c)
point operator-(
const point &b)
const
point operator+(
const point &b)
const
//數乘計算
point operator*(
const
double
&k)const
point operator/(
const
double
&k)const
double
operator*(
const point &b)
const
}point;
double
dist
(point p1, point p2)
struct sphere
sc[maxn]
;void
sphereintervs
(sphere a, sphere b,
double
&v)elseif(
sgn(d-
fabs
(a.r-b.r)
)<=0)
//內含
//球心距
double t =
(d*d + a.r*a.r - b.r*b.r)/(
2.0* d)
;//h1=h2,球冠的高
double h =
sqrt
((a.r*a.r)
-(t*t))*
2;double angle_a =2*
acos
((a.r*a.r + d*d - b.r*b.r)/(
2.0* a.r*d));
//余弦公式計算r1對應圓心角,弧度
double angle_b =2*
acos
((b.r*b.r + d*d - a.r*a.r)/(
2.0* b.r*d));
//余弦公式計算r2對應圓心角,弧度
double l1 =
((a.r*a.r - b.r*b.r)
/ d + d)/2
;double l2 = d - l1;
double x1 = a.r - l1, x2 = b.r - l2;
//分別為兩個球缺的高度
double v1 = pi*x1*x1*
(a.r - x1 /3)
;//相交部分r1圓所對應的球缺部分體積
double v2 = pi*x2*x2*
(b.r - x2 /3)
;//相交部分r2圓所對應的球缺部分體積
v = v1 + v2;
//相交部分體積
return;}
intmain()
牛客練習賽41E 球的體積並
題解 先判斷一下兩個球不相交以及包含的關係,比較好考慮,然後就是兩個球有交集的時候,主要就是求兩個弧面對應的高,可以設夾角,然後利用cos角的關係就是餘玄定理表示對應的高,最後就是求相交的體積,得出結果。include include include include include using na...
牛客練習賽41 E 球的體積並 幾何
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k special judge,64bit io format lld 題目描述 某天lililalala正在玩一種奇妙的吃雞遊戲 因為在這個遊戲裡會同時有兩個圓形安全區 他們可能相交 lililalala覺得求...
球體相交體積模板 牛客練習賽41 B 球的體積並
某天lililalala正在玩一種奇妙的吃雞遊戲 因為在這個遊戲裡會同時有兩個圓形安全區 他們可能相交 lililalala覺得求圓的面積並太簡單了,所以想把這個問題公升級一下。現在在三維空間裡有 2 個球形安全區,分別用四元組 和 表示,其中 r1 r2 r1 r2表示球半徑,x1,y1,z1 x...