python-3.x - python3中的苍鹭公式
问题描述
您好,我的苍鹭配方有问题,想知道您是否可以看一下。我知道我是个菜鸟。不过,我感谢您花时间查看此代码。我也会给你提示。
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) 对的元组)
倒数第二部分——编写一个函数 area(vertices(n)),它在给定 n 个顶点的列表的情况下找到正三角形的面积。
最后一部分___编写一个主程序,生成n = 3, 103, 203, ... 1003的正多边形的顶点 对于每个多边形,找到并打印n, perimeter, area, perimeter**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
所以我知道该地区或我的苍鹭内部存在问题。
感谢您的时间
解决方案
您忘记在循环内重新计算顶点和值,因此使用了初始顶点列表 ignoring 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)
推荐阅读
- django - 使用 values() 返回实例方法的结果
- swift - 如何从 OpenWeatherMap 解析“雨”?
- python - 代码执行 enter 而不执行命令点击
- swift - 加载视图时不出现搜索栏 - iOS
- vba - 查找页面并为单元格赋值
- cordova - 如何避免cordova插件阻塞Ionic 3中的主线程
- python - 更改字典矩阵中的特定值
- assembly - rand 如何在 Win64 NASM 程序集中正确使用?
- c# - Winform中如何排除SaveFileDialog的文件路径?
- django - 我可以根据成功付款制作模型 save() 方法吗?