簡單多邊形與圓相交求面積

2021-10-01 16:35:28 字數 2282 閱讀 8201

所謂簡單多邊形,就是指不相鄰的邊不相交,且每個頂點只跟2條邊相鄰。一般而言,除非題目要求判斷是否為簡單多邊形,否則給出的資料肯定都是簡單多邊形。以下將簡單多邊形簡稱為多邊形。多邊形一般都是以點集的形式給出,順時針或者逆時針。另外乙個需要注意的概念就是多邊形的凹凸性。一般而言,凸多邊形的演算法比凹多邊形的演算法要簡單的多。所以設計演算法時,必須注意題目條件。而有向面積是不區分凹凸性的演算法之一。

計算三角形的面積和有向面積使用叉積即可,請參考計算幾何的基礎資料結構與演算法,這種情況下很容易計算出凸多邊形的面積,對乙個n邊形來說,就是n−2

n-2n−

2個三角形的面積之和。而對凹多邊形而言,如上圖右邊,△p0

p1p2

\big********up

△p0​p1

​p2​

其實不在多邊形內,如果直接加面積必然出錯。但解決辦法也很簡單,使用有向面積!△p0

p1p2

\big********up

△p0​p1

​p2​

的旋向與整個多邊形的旋向其實是反的,而△p0

p2p3

\big********up

△p0​p2

​p3​

則是正的,有向面積累加之後,很自然的多邊形外部的面積就抵消了。最後的結果仍然是整個多邊形的有向面積。更進一步的,實際上不需要選擇p

0p_0

p0​作為基點來劃分三角形,也不需要選擇多邊形內部的一點,而是平面上的任意點。

如上圖,△op

0p1\big********up

△op0​p

1​既包含了多邊形的內部部分,也包含了多邊形的外部部分,但是△op

1p2\big********up

△op1​p

2​旋向相反,就會抵消一部分,如此迴圈,最後外部部分必然全部抵消,只剩下多邊形的內部部分。無論凹凸都一樣。

總結一下,多邊形的有向面積,其實就是選乙個基準點(一般就是p

0p_0

p0​),然後對每條邊(邊與基準點構成乙個三角形)算乙個三角形的有向面積,累加即可。而圓與多邊形相交求面積的處理思路是一樣的。

如上圖所示,選擇圓心o

oo作為基準點,則多邊形與圓o

oo相交的有向面積,可以分解為圓o

oo與圓心△op

ipi+

1\big********up}

△opi​p

i+1​

的有向面積。所以,只需求解圓心三角形與圓相交的有向面積即可。

設圓心三角形的另外2個點分別為a

aa和b

bb,顯然要考慮線段abab

ab與圓o

oo的相交情況。如果使用幾何方法,需要判斷a

aa、b

bb是否在圓內等幾種情況。這裡使用引數法來描述線段abab

ab,將所有情況討論都轉化為對一元二次方程根的討論,形式上比較統一。當然討論情況的數量是一樣多的。設p

pp是線段abab

ab上的一點,則p=(

1−t)

a+tb

p=(1-t)a+tb

p=(1−t

)a+t

b當tt

t取值[0,

1][0,1]

[0,1

]時,p

pp就是線段abab

ab上的點,當t≥1

t\ge1

t≥1時,t

tt就是射線b(ab方向)上的點,當t≤0

t\le0

t≤0時,t就是射線a(ba方向)上的點。所以控制t的取值,就能控制ab這一段線元到底是線段、射線還是直線。t的本質含義就是(注意與定比分點的區別)t=a

pabt=\frac

t=abap

​又由於p是圓o上一點,所以滿足圓方程,於是可以得到乙個關於t的一元二次方程。t的解就對應直線ab與圓o的相交情況。設t

1t_1

t1​是較小的解,t

2t_2

t2​是較大的解,有如下情況:

求得圓心三角形與圓相交的面積後,不需要區分三角形還是多邊形,直接按照n邊形迴圈n次即可。具體**可以參考多邊形與圓相交求面積題目。

多邊形求面積,

這個程式很值得一博。昨天一位學地質的高中同學問我寫個程式求多邊形面積,因為他說看到excel就煩。正好前段時間在csdn上看到乙個帖子求多邊形面積,也想到了乙個演算法,於是寫了這個程式。演算法描述 乙個多邊形的面積可以由這樣兩個系列的梯形來計算,以凸多邊形舉例,在圖形上方的一系列邊和其在x軸的投影組...

求多邊形面積

可以利用多邊形求面積公式 s 0.5 x0 y1 x1 y0 x1 y2 x2 y1 xn y0 x0 yn 其中點 x0,y0 x1,y1 xn,yn 為多邊形上按逆時針順序的頂點。簡要證明 1.我們先簡單地從三個點入手 包括原點 面積s oab sabcd s oad s obc sabcd y...

求多邊形的面積

多邊形的面積求法 在草稿紙上面我們,我們就把它考慮成組合圖形去處理,所以我們是把他不斷的拆分,因為我們是不可以直接去求它的面積的。那麼在我們的電腦裡面,我們用 怎麼去去求面積呢?因為我們不是提前知道他們的組合圖形,所以我們不知道怎麼樣去求,或者說按照什麼圖形的面積求法,去求。當邊數為3的時候,我們知...