Формула цапель в python3 - PullRequest
0 голосов
/ 02 ноября 2018

Здравствуйте, у меня проблемы с формулой моей цапли, и мне было интересно, не могли бы вы взглянуть на нее. Я знаю, что я нуб. Однако я ценю ваше время, глядя на этот код. Я также дам вам подсказку.

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) пары)

ВТОРАЯ ПОСЛЕДНЯЯ ЧАСТЬ - напишите область функции (вершины (n)), которая находит площадь правильного треугольника задана списком из его n вершин.

LAAST PART___ напишите основную программу, которая генерирует вершины правильных многоугольников для n = 3, 103, 203, ... 1003 Для каждого полигона найдите и распечатайте n, периметр, площадь, периметр ** 2 / (4,0 * площадь)

Я просто запутался в отношении вывода после того, как у вас есть более чем 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 голосов
/ 02 ноября 2018

Вы забыли пересчитать вершины и значения внутри цикла, поэтому использовался начальный список вершин, игнорируя 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)
...