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。
答案 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线之间的交叉处有一个共同的顶点)。
因此,如果你想计算扭曲的多边形区域,你必须改进你的代码来计算这些多边形类型。 希望帮助你!