所謂簡單多邊形,就是指不相鄰的邊不相交,且每個頂點只跟2條邊相鄰。一般而言,除非題目要求判斷是否為簡單多邊形,否則給出的資料肯定都是簡單多邊形。以下將簡單多邊形簡稱為多邊形。多邊形一般都是以點集的形式給出,順時針或者逆時針。另外乙個需要注意的概念就是多邊形的凹凸性。一般而言,凸多邊形的演算法比凹多邊形的演算法要簡單的多。所以設計演算法時,必須注意題目條件。而有向面積是不區分凹凸性的演算法之一。
計算三角形的面積和有向面積使用叉積即可,請參考計算幾何的基礎資料結構與演算法,這種情況下很容易計算出凸多邊形的面積,對乙個n邊形來說,就是n−2
n-2n−
2個三角形的面積之和。而對凹多邊形而言,如上圖右邊,△p0
p1p2
\big********up
△p0p1
p2
其實不在多邊形內,如果直接加面積必然出錯。但解決辦法也很簡單,使用有向面積!△p0
p1p2
\big********up
△p0p1
p2
的旋向與整個多邊形的旋向其實是反的,而△p0
p2p3
\big********up
△p0p2
p3
則是正的,有向面積累加之後,很自然的多邊形外部的面積就抵消了。最後的結果仍然是整個多邊形的有向面積。更進一步的,實際上不需要選擇p
0p_0
p0作為基點來劃分三角形,也不需要選擇多邊形內部的一點,而是平面上的任意點。
如上圖,△op
0p1\big********up
△op0p
1既包含了多邊形的內部部分,也包含了多邊形的外部部分,但是△op
1p2\big********up
△op1p
2旋向相反,就會抵消一部分,如此迴圈,最後外部部分必然全部抵消,只剩下多邊形的內部部分。無論凹凸都一樣。
總結一下,多邊形的有向面積,其實就是選乙個基準點(一般就是p
0p_0
p0),然後對每條邊(邊與基準點構成乙個三角形)算乙個三角形的有向面積,累加即可。而圓與多邊形相交求面積的處理思路是一樣的。
如上圖所示,選擇圓心o
oo作為基準點,則多邊形與圓o
oo相交的有向面積,可以分解為圓o
oo與圓心△op
ipi+
1\big********up}
△opip
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的時候,我們知...