codevs3273 兩圓的交 計算幾何

2022-08-24 05:00:22 字數 1437 閱讀 9113

用了math庫函式,反正code沒限制,懶得自己寫了

uses math;

var a,b,c,d,e,f,h,m,n,g,o,p:double

;begin

read(a,b,c,d,e,f);

if cg;end;

h:=hypot(a-d,b-e);

if h>=c+f then begin write('

0.000

');halt;end;

if c>=f+h then begin write(pi*f*f:0:3

);halt;end;

m:=(c*c-f*f+h*h)/2/h;

n:=sqrt(c*c-m*m);

o:=c*c*pi*(arcsin(n/c)/pi)-n*m;

p:=f*f*pi*(arcsin(n/f)/pi)-n*abs(h-m);

if m>h then p:=f*f*pi-p;

write(o+p:0:3

);end.

view code

簡單解釋一下吧,math庫自帶pi函式,貌似是多少位都可以(沒試過,反正前20位沒壓力),其次,hypot函式中給出兩個double變數a和b,返回另乙個double變數c,表示以a,b為直角邊的直角三角形斜邊長為c。有了這兩個函式,這道題就很簡單了

我們對輸入資料做一下處理,使大圓在前。可以不用交換座標。

有兩種特殊情況是沒有交點的,就是相離和包含(把相切也算在裡面)。我們要排除這兩種特殊情況。

相離時兩圓半徑和c+f≤圓心距離h。

包含時小圓半徑f+圓心距離h≤大圓半徑c。

特殊情況已排除,接下來我們可以把問題簡單化。

以大圓圓心為原點,兩圓圓心連線為x軸重新構造乙個座標系,則大圓座標為(0,0),小圓座標為(圓心距離h,0)。

這樣計算交點就簡單多啦。設第

一、二象限的交點座標為(m,n),則有方程組

①m²+n²=大圓半徑c²;②(m-小圓橫座標h)²+n²=小圓半徑f².

解得m=(大圓半徑c²-小圓半徑f²+小圓橫座標h²/(2*小圓橫座標h);

進一步得n=根號(大圓半徑c²-m²);

最難的是計算面積。我們把它分成兩個弓形計算。大圓上的弓形比較好計算,因為只有一種情況。

扇形面積=大圓面積*((arcsin(交點縱座標n/大圓半徑c)*180/pi*2))/360)=大圓面積*(arcsin(n/c)/pi).

三角型面積=交點縱座標n*2*交點橫座標m*1/2=n*m.

弓形面積o=扇形面積-三角型面積=c²*pi*(arcsin(n/c)/pi)-n*m.

小圓所對弓形面積比較難算,因為得分類討論。先按上述方法算出小圓所對小弓形的面積p。

接下來要分類討論:什麼時候取小弓形?什麼時候取大弓形?

好了,兩個弓形都算好了,加起來就行了。

結束了,希望大家都弄得懂。

簡單的兩圓關係

題 目地 址 color題目位址 題目位址 有一定總結性的題目,所以我記下來了。題意就是對於三維中的n個球找到一條最小生成樹,相碰或者想包含的小球視為可以直接到達。所以這樣的情況直接讓邊長為0 00即可。那麼怎麼判斷這樣的情況呢。d dd為圓心距,r rr為大圓半徑,r rr為小圓半徑 d r r ...

求兩圓交集的面積

設圓c1 半徑為r1 面積為s1 圓cr 半徑為 r2 面積為s2 圓心距離為d 兩圓的交集有3種情況 1 兩圓交面積為0的情況 即 d r1 r2 2 小圓內含含於大圓的情況 即 max r1,r2 d min r1,r2 3 兩圓相交的情況 即 d r1 r2 且 d max r1,r2 對於第...

求兩圓的公切線計算

關於兩圓的公切線計算我們首先需要搞清楚的是兩個圓之間有哪些位置關係,兩個圓的位置包括內含 內切 外切 外離幾種方式,可以看出位置關係可以根據 兩圓心之間的距離 與 兩圓半徑和 以及 兩圓半徑差 之間的關係判斷。假設大圓半徑為r,小圓半徑為 r,把 兩圓心之間的距離 表示為d,兩圓半徑和 表示為s,兩...