多边形面积公式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多边形面积公式相关的知识,希望对你有一定的参考价值。

已知多边形各顶点的坐标值,求面积

对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可。已知三角形顶点坐标,其三角形积可以利用向量的叉乘来计算。

对于凹多边形,如果还是按照上述方法划分成三角形,如下图,多边形的面积 = S_ABC + S_ACD + S_ADE, 这个面积明显超过多边形的面积。

我们根据二维向量叉乘求三角形ABC面积时,利用的是

这样求出来的面积都是正数,但是向量叉乘是有方向的,即 是有正负的,如果把上面第三个公式中的绝对值符号去掉,即 ,那么面积也是有正负的。反应在上面第二个图中,S = S_ABC + S_ACD + S_ADE,如果S_ABC和S_ADE是正的,那么S_ACD是负的,这样加起来刚好就是多边形的面积。对于凸多边形,所有三角形的面积都是同正或者同负。

如果我们不以多边形的某一点为顶点来划分三角形而是以任意一点,如下图,这个方法也是成立的:S = S_OAB + S_OBC + S_OCD + S_ODE + S_OEA。计算的时候,当我们取O点为原点时,可以简化计算。

当O点为原点时,根据向量的叉积计算公式,各个三角形的面积计算如下:

S_OAB = 0.5*(A_x*B_y - A_y*B_x) 【(A_x,A_y)为A点的坐标】
S_OBC = 0.5*(B_x*C_y - B_y*C_x)
S_OCD = 0.5*(C_x*D_y - C_y*D_x)
S_ODE = 0.5*(D_x*E_y - D_y*E_x)
S_OEA = 0.5*(E_x*A_y - E_y*A_x)
参考技术A 正多边形内角计算公式与半径无关
要已知正多边形边数为N 内角和=180(N-2)

半径为R
圆的内接三角形面积公式:(3倍根号3)除以4再乘以R方
外切三角形面积公式:3倍根号3 R方
外切正方形:4R方
内接正方形:2R方
五边形以上的就分割成等边三角形再算
内角和公式——(n-2)*180`
我们都知道已知A(x1,y1)、B(x2,y2)、C(x3,y3)三点的面积公式为
|x1 x2 x3|
S(A,B,C) = |y1 y2 y3| * 0.5 = [(x1-x3)*(y2-y3) - (x2-x3)*(y1-y3)]*0.5
|1 1 1 |
(当三点为逆时针时为正,顺时针则为负的)

对多边形A1A2A3、、、An(顺或逆时针都可以),设平面上有任意的一点P,则有:
S(A1,A2,A3,、、、,An)
= abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))

P是可以取任意的一点,用(0,0)时就是下面的了:

设点顺序 (x1 y1) (x2 y2) ... (xn yn)
则面积等于
|x1 y1| |x2 y2| |xn yn|
0.5 * abs( | | + | | + ...... + | | )
|x2 y2| |x3 y3| |x1 y1|

其中
|x1 y1|
| |=x1*y2-y1*x2
|x2 y2|
因此面积公式展开为:

|x1 y1| |x2 y2| |xn yn|
0.5 * abs( | | + | | + ...... + | | )=0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+...+xn*y1-yn*x1)
|x2 y2| |x3 y3| |x1 y1|本回答被提问者采纳

求任意多边形面积 python实现

数学解决方法:

  多边形外选取一点,连接各点构成三角形,计算求和......  详细链接  http://blog.csdn.net/hemmingway/article/details/7814494

 

  已知三角形三边长,求三角形面积------>海伦公式  链接:http://www.zybang.com/question/29d209e9732d1f1f6a6de35b94edd3ba.html

 

由上实现下面python代码   源代码出处  链接: http://blog.csdn.net/zfq43/article/details/8595288

 

# -*- coding: cp936 -*-
import math


class Point():
    def __init__(self,x,y):
        self.x = x
        self.y = y




def GetAreaOfPolyGon(points):

    area = 0
    if(len(points)<3):
        
         raise Exception("error")

    p1 = points[0]
    for i in range(1,len(points)-1):
        p2 = points[1]
        p3 = points[2]

        #计算向量
        vecp1p2 = Point(p2.x-p1.x,p2.y-p1.y)
        vecp2p3 = Point(p3.x-p2.x,p3.y-p2.y)


        
        #判断顺时针还是逆时针,顺时针面积为正,逆时针面积为负
        vecMult = vecp1p2.x*vecp2p3.y - vecp1p2.y*vecp2p3.x   #判断正负方向比较有意思
        sign = 0
        if(vecMult>0):
            sign = 1
        elif(vecMult<0):
            sign = -1

        triArea = GetAreaOfTriangle(p1,p2,p3)*sign
        area += triArea
    return abs(area)


def GetAreaOfTriangle(p1,p2,p3):
    ‘‘‘计算三角形面积   海伦公式‘‘‘
    area = 0
    p1p2 = GetLineLength(p1,p2)
    p2p3 = GetLineLength(p2,p3)
    p3p1 = GetLineLength(p3,p1)
    s = (p1p2 + p2p3 + p3p1)/2
    area = s*(s-p1p2)*(s-p2p3)*(s-p3p1)   #海伦公式
    area = math.sqrt(area)
    return area

def GetLineLength(p1,p2):
    ‘‘‘计算边长‘‘‘
    length = math.pow((p1.x-p2.x),2) + math.pow((p1.y-p2.y),2)  #pow  次方
    length = math.sqrt(length)   
    return length    

def main():
    p1 = Point(1,1)
    p2 = Point(2,1)
    p3 = Point(2,2)
    p4 = Point(1,2)
    points = [p1,p2,p3,p4]
    area = GetAreaOfPolyGon(points)
    print(math.ceil(area))
    assert math.ceil(area)==1


if __name__ == __main__:
    main()

 

以上是关于多边形面积公式的主要内容,如果未能解决你的问题,请参考以下文章

多边形面积公式

皮克公式:点阵中多边形的面积公式

多边形面积

已知四点坐标如何求四边形面积

数学如何叉乘求四边形面积?

求解多边形面积2S= ΣXi (Yi+1-Yi-1),(i属于1~n),公式解析及编程实现