计算任意多边形面积的算法
-
计算任意多边形面积的算法
方法
1:
用这个方法吧:
我们都知道已知
p>
A
(
x1,y
1<
/p>
)
B
(
x2,y
2
)
C
(
p>
x3,y
3
)三点的面积公式为
|x1
x2
x3|
S(
A
,B,C
)
=
|y
1
y
2
y3|
*
0.5
(
当三点为逆时针时为正,顺时针则为负的
)
|1
1
1 |
对多边形
A
1A
2A
3
、
、
、
A
n
(顺或逆时针都可以)
,设平面上有任意的一点
P
,则有:
S
(
A
1
,
A
2
,
A
3
,
、
、
、
,
A
n
)<
/p>
=
abs(S
(
P
,
A
1
,
A
2
)
+
S
(
P
,
A<
/p>
2
,
A
3
)
+
、
、
、
+S
(
P
,
A
n
,
< br>A
1
)
)
P
是可以取任意的一点,用(
0
,
0
)就可以了。
还有一个方法:
任意一个简单多边形
,当它的各个顶点位于网格的结点上时,它的面积数
S=b/2+c+1
其中:
b
代表该多边形边界
上的网络结点数目
c
代表该多边形内的网络结点数目
所以把整个图形以象素为单位可以把整个图形分成若干个部分
,计算该图形边界上的点
b
和内部的点
c
就得到面积数
S
了,然后把
S
乘
以一个象素的面积就是所求的面积了。
p>
多边形面积
的计算公式如下:设有
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
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;
} -