多邊形面積和點串串行判斷

2021-09-08 00:09:25 字數 1816 閱讀 5040

下面講解以上圖逆時針序列三角形abc為例,進行推導和講解:

a(x1,y1)    b(x2,y2)    c(x3,y3)

s為三角形abc的面積,sm1為直角梯形aa'b'b的面積,sm2為直角梯形bb'c'c的面積,sn1為直角梯形aa'c'c的面積

容易得知:s =-(sm1+sm2) + sn1

-sm1 = (x1-x2)(y1+y2)/2 = (x1*y1+x1*y2-x2*y1-x2*y2)/2

-sm2 = (x2-x3)(y2+y3)/2 = (x2*y2+x2*y3-x3*y2-x3*y3)/2

sn1 = (x3-x1)(y1+y3)/2 = (x3*y1+x3*y3-x1*y1-x1*y3)/2

s = [(x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3*y1-x1*y3)]/2

推導到一般,演算法描述:

令:n條邊的多邊形的點串陣列為:p[n+1] = ,規定:p[n] = p[0].

則該多邊形的面積為:

若s>0,則點串為逆時針存放

若s<0,則點串為順時針存放

若s=0,無法判斷點串的序列方向

注意:多邊形必須滿足以下條件才可使用該演算法公式計算面積。

(1)凸多邊形

(2)向x軸投影後的頂點的先後順序與原形點順序保持一致

如下圖:從最小x值m點和最大x值n點將多邊形分成兩半,將兩條折線段命名為:mn(上)  mn(下)

mn(上)  mn(下)上的各個形點分別向x軸做投影;

若mn(上)  mn(下)投影後的頂點的先後順序與折線段形點順序均保持一致,則該多邊形可使用該方法計算面積。

(3)向y軸投影後的頂點的先後順序與原形點順序保持一致

如下圖:從最小y值n點和最大y值m點將多邊形分成兩半,將兩條折線段命名為:mn(左)  mn(右)

mn(左)  mn(右)上的各個形點分別向y軸做投影;

若mn(左)  mn(右)投影後的頂點的先後順序與折線段形點順序均保持一致,則該多邊形可使用該方法計算面積。

(4)不滿足(2)(3)條件的凹多邊形不能直接使用該公式計算面積(如下圖)

對於求任意多邊形面積通用的做法是:

a. 首先將多邊形進行delaunay三角剖分

b. 然後求各個三角形的面積

c. 最後對這些面積進行求和

例如可將(4)中的多邊形先進行三角剖分:

多邊形面積

點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...

求任意多邊形面積(凹多邊形和凸多邊形)

遇到問題 已知多邊形的各個左邊點,要求多邊形的面積 然後我搜尋了下看到這篇文章 這個人說的不多,但是簡單明瞭 首先已知各定點的座標分別為 x1,y1 x2,y2 x3,y3 xn,yn 則該多邊形的面積公式為 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 xk yk 1 xk 1 yk...

多邊形求面積,

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