计算任意多边形面积的算法

萌到你眼炸
902次浏览
2021年02月10日 06:15
最佳经验
本文由作者推荐

-

2021年2月10日发(作者:桀骜不驯怎么读)


计算任意多边形面积的算法



方法


1:


用这个方法吧:



我们都知道已知


A



x1,y


1< /p>



B



x2,y


2



C



x3,y


3


)三点的面积公式为

< p>













|x1




x2




x3|


S(


A


,B,C


)



=






|y


1




y


2




y3|



*




0.5



(


当三点为逆时针时为正,顺时针则为负的


)













|1





1






1 |



对多边形


A


1A


2A


3





A


n


(顺或逆时针都可以)


,设平面上有任意的一点


P


,则有:

< p>




S

< p>


A


1



A


2



A

3







A


n


)< /p>





=



abs(S


P



A


1



A


2





+



S



P



A< /p>


2



A


3



+



< p>


+S



P



A


n


< br>A


1



)

P


是可以取任意的一点,用(


0



0


)就可以了。





还有一个方法:



任意一个简单多边形 ,当它的各个顶点位于网格的结点上时,它的面积数


S=b/2+c+1



其中:


b


代表该多边形边界 上的网络结点数目









c


代表该多边形内的网络结点数目




所以把整个图形以象素为单位可以把整个图形分成若干个部分 ,计算该图形边界上的点


b


和内部的点


c


就得到面积数


S


了,然后把


S



以一个象素的面积就是所求的面积了。





多边形面积 的计算公式如下:设有


n


个点


(x[1 ],y


[1])(x[2],y


[2]),...(x[n], y


[n])


围成一个没有边相交的多边形,则其围成的闭合多边 形面积


|S|



为:


S=∑y


[i]



*(x[i+1]-x[i-1])





其中


i=1,2,...n


,且当


i



j


除以


n


的余数相同的时候,

< br>x[i]=


x[j


]



y


[i]=y


[j]


。 该公式用于凸凹


多边形均可。





方法


2:


int



C


ImageViewV


iew


::GetRgnA

< p>
rea()


{


int



area



=



0;



int



i,j;


CRect



rect;


CPoint*




m_points;


int m_nPoints;


CImageV


iew


Doc


*



pDoc



=



GetDocument();


m_nPoints



=



pDoc->m_ar


y


e();


m_points



=



new




CPoint[m_nPoints];


for(i



=



0;



i



;



i++)





//


获得所有顶点的位置



{


m_points[i]



=



pDoc->m_ar


y


RectPoint[i]->m_ptPoint;


}

-


-


-


-


-


-


-


-