【问题标题】:Area computation of polygon using coordinates in python使用python中的坐标计算多边形的面积
【发布时间】:2015-04-13 05:20:17
【问题描述】:
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。

【问题讨论】:

  • 是什么让您认为这是计算闭合多边形面积的正确方法?您是否尝试使用斯托克斯定理进行轮廓积分?
  • 我不知道斯托克斯定理是什么,但有人告诉我,我可以使用这个简单的代码来计算多边形的面积。
  • 你应该知道斯托克斯定理是什么:将面积积分转换为等高线积分。你的手工计算是否正确?
  • 我尝试手动计算面积,但我的答案总是不同且正确。 (我想我应该研究斯托克斯定理。但我想知道为什么这段代码根本不起作用)。非常感谢。
  • 请修正您的缩进,并给出示例返回的不是所需的答案。

标签: python python-2.7


【解决方案1】:

您没有正确实现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 页面中示例的坐标测试此代码,软件将为您提供正确的区域。 但是,如果您使用坐标进行测试,它会给出相同的结果。 这不仅是因为您的坐标都是正数,还因为您的多边形是“扭曲的”!

如果你用以下方法绘制多边形 ABCDA:

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

你得到一个“扭曲”的多边形(两个三角形,在 BC 线和 AD 线的交点上有一个公共顶点)。

因此,如果您想计算任一扭曲多边形的面积,您必须改进代码以计算这些多边形类型。 希望对你有所帮助!

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2014-08-19
    • 2011-07-28
    • 2013-11-13
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多