python3中的苍鹭公式

时间:2018-11-02 03:20:13

标签: python-3.x function for-loop math area

您好,我在使用苍鹭的配方时遇到麻烦,想知道您是否可以看一下它。我知道我是菜鸟。但是,感谢您抽出宝贵时间来查看此代码。我也会提示您。

import math


#Part 1
def vert(k,n):
 x = math.cos(2*math.pi*k/n)
 y = math.sin(2*math.pi*k/n)
 return(x, y)

#Part 2
def vertices(n):
 vertic = []
 for k in range(n):
  vertic.append(vert(k,n))
 return(vertic)

## return a list of tuples


##Part 3
def dist(p1, p2):
 distance =  math.sqrt((p2[0]-p1[0])**2 + (p2[1]- p1[1])**2)
 return distance




#Part 4
def perimeter(vertic):
 perimeter = 0
 z = len(vertic)
 for i in range(z):
     w = (i + 1) % z
     currentdistance = dist(vertic[i], vertic[w])
     perimeter += currentdistance
 return perimeter



#Part 5
def heron(p1, p2, p3):
    side1 = dist(p1,p2)
    side2 = dist(p2,p3)
    side3 = dist(p3,p1)
    s = (side1+side2+side3)/2
    a = math.sqrt(s*(s-side1)*(s-side2)*(s-side3))
    return a

        #Part 6  
def area(vertic):
 calcarea = 0
 z = len(vertic)     
 p1 = v[0]
 p2 = v[1]
 p3 = v[2]
 a = dist(p1,p2)
 b = dist(p2,p3)
 c = dist(p3,p1)
 s = (a+b+c)/2
 z = len(v)
 for i in range(z):
   calcarea += heron(p1,p2,p3)
   calcarea = ((s*(s-a)*(s-b)*(s-c)) ** 0.5)   
 return calcarea

##Main program

ntest = 3
v = vertices(ntest)
n = 3
actualperimeter = perimeter(v)
actualarea = area(v)
for n in range(n,1004,100):
    r = (actualperimeter,actualarea)
    newval= (actualperimeter*actualperimeter)/(4.0*actualarea)
    print(n, actualperimeter, actualarea, newval)

提示是:::

编写一个函数heron(p1,p2,p3)来查找 具有给定顶点的三角形的面积。 (同样,p1,p2和p3是表示(x,y)对的元组)

编写一个函数heron(p1,p2,p3)来查找 具有给定顶点的三角形的面积。 (同样,p1,p2和p3是表示(x,y)对的元组)

第二部分-编写一个发现以下内容的功能区域(vertices(n)) 给出了n个顶点的列表的正三角形的面积。

LAAST PART___编写一个主程序,该程序生成 n = 3,103,203,... 1003的正多边形的顶点 对于每个多边形,查找并打印 n,周长,面积,周长** 2 /(4.0 * area)

在您拥有超过3个面的多边形之后,我只是对输出感到困惑,因为我们想在循环中获得这些结果。

3 5.196152422706632 1.299038105676658 5.196152422706632
103 6.2822111395091325 3.139644590113289 3.1425672292376063
203 6.282934505126809 3.141091067504141 3.141843482675548
303 6.283072732486377 3.1413675078339525 3.1417052337290965
403 6.283121669116721 3.141465378624226 3.141656293393
503 6.283144457227955 3.1415109541646187 3.1416335042584804
603 6.283156882658976 3.1415358047799495 3.1416210784576846
703 6.283164394134183 3.141550827624372 3.1416135668230454
803 6.283169278529815 3.1415605963637927 3.141608682350027
903 6.28317263204446 3.1415673033654166 3.1416053287941073

my results are

3 5.196152422706632 1.299038105676658 5.196152422706632
103 5.196152422706632 1.299038105676658 5.196152422706632
203 5.196152422706632 1.299038105676658 5.196152422706632
303 5.196152422706632 1.299038105676658 5.196152422706632
403 5.196152422706632 1.299038105676658 5.196152422706632
503 5.196152422706632 1.299038105676658 5.196152422706632
603 5.196152422706632 1.299038105676658 5.196152422706632
703 5.196152422706632 1.299038105676658 5.196152422706632
803 5.196152422706632 1.299038105676658 5.196152422706632
903 5.196152422706632 1.299038105676658 5.196152422706632
1003 5.196152422706632 1.299038105676658 5.196152422706632

所以我知道区域或我的苍鹭有问题。

谢谢您的时间

1 个答案:

答案 0 :(得分:0)

您忘了在循环内重新填充顶点和值,因此使用初始顶点列表忽略了n

只需更改循环主体:

for n in range(3, 1004, 100):
    v = vertices(n)
    actualperimeter = perimeter(v)
    actualarea = area(v)
    r = (actualperimeter,actualarea)
    newval= (actualperimeter*actualperimeter)/(4.0*actualarea)
    print(n, actualperimeter, actualarea, newval)
相关问题