使用python中的坐标计算多边形的面积

时间:2015-02-12 12:55:34

标签: python python-2.7

sum=0.0
b=input("Number of corners: ")
while b < 2:
    print "Invalid number of corners."
for i in range (b):
    xcoor=(i+1)
    X=input ("x-coordinate:")
    ycoor=(i+1)
    Y=input ("y-coordinate:")
    if i==0:
        x1=X 
        y1=Y
        xp=X
        yp=Y
elif i>=0:
    sum+=(xp*Y-yp*X)
xp=X
yp=Y

sum=sum+(X*y1-Y*x1)
area=(sum/2.0)
a=abs(area)
print "Area= %.1f" % (a)

答案总是错误的。为什么?谢谢。我是一个新手。我似乎无法找到该区域,有时它会给出Area = 0.0

当我尝试运行代码并输入坐标为x和y时,会发生这种情况:

Number of corners: 4
x-coordinate:2

y-coordinate:3

x-coordinate:4

y-coordinate:2

x-coordinate:5

y-coordinate:6

x-coordinate:7

y-coordinate:2

Area= 4.5. 

如果我手动计算区域,结果应为18。

1 个答案:

答案 0 :(得分:0)

您没有正确实施Shoelace formula。我更改了一些代码以便修复它:

sum1=0.0
sum2=0.0
b=input("Number of corners: ")
matrix=[None]*(b+1);
while b < 2:
    print "Invalid number of corners."
for i in range (b):
    xcoor=(i+1)
    X=input ("x-coordinate:")
    ycoor=(i+1)
    Y=input ("y-coordinate:")
    if i==0:
        x1=X 
        y1=Y
        xp=X
        yp=Y

    matrix[i]=(X,Y)
    xp=X
    yp=Y



matrix[b]=(x1,y1);
print matrix
for i in range(len(matrix)-1):
    sum1 = sum1 + matrix[i][0]*matrix[i+1][1] ;
    #print str(matrix[i][0]) +'*'+str(matrix[i+1][1]) +'='+str(matrix[i][0]*matrix[i+1][1]);
for i in range(len(matrix)-1):
    sum2 = sum2 + matrix[i][1]*matrix[i+1][0] ;
    #print str(matrix[i][1]) +'*'+str(matrix[i+1][0]) +'='+str(matrix[i][1]*matrix[i+1][0]);
area=( abs(sum1-sum2)/2.0)
a=area
print "Area= %.1f" % (a)

但这不是全部! 如果您使用Wiki页面中示例的坐标测试此代码,则软件将为您提供正确的区域。 但是,如果您使用坐标进行测试,它会给出相同的结果。 这不仅是因为你的坐标都是正面的,而且因为你的多边形是'扭曲的'!

如果您使用以下方式绘制polyghon ABCDA:

A(2,3)B(4,2)C(5,6)D(7,2)

你获得了一个“扭曲的”多边形(两个三角形,在BC和AD线之间的交叉处有一个共同的顶点)。

因此,如果你想计算扭曲的多边形区域,你必须改进你的代码来计算这些多边形类型。 希望帮助你!