牛客練習賽41 E 球的體積並 球的體積並模板

2021-09-11 18:21:39 字數 2004 閱讀 7910

題意

求兩個球的體積並做法

用球缺公式+計算幾何模板即可解決。

球缺公式為: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...