创建类以查找图形的边长和面积

  • 本文关键字:查找 图形 创建 python
  • 更新时间 :
  • 英文 :


问题是:创建一个类Shape,将二维顶点列表作为输入。例如:

tri = Shape([[0,0],[0,1],[1,0]])
# or
sqr = Shape([[0,0],[0,1],[1,1], [1,0]])

该类应存储两个属性,顶点本身以self.verts和顶点数以self.n。然后类应该有一个方法calcSideLength(),该方法采用介于 0 和形状边数之间的整数参数,并返回边的长度。例如形状:

tri = Shape([[0,0],[0,1],[1,0]])

有三面SIDE0: [0,0] --- [0,1]SIDE1: [0,1] --- [1,0]SIDE2: [1,0] --- [0,0]

每条边的长度由欧几里得距离给出:

sqrt((  1−  ′1)^2+(  2−  ′2)^2)

因此,三条边的长度将是 1、1.414 和 1。

然后创建一个新的类Triangle它是Shape的子类。它应该包括一个新的方法calculateArea()返回三角形的面积。当然,这是 1/2× 小时×小时 .长度和高度是三角形较短的两条边。

这就是我得到的:

import math
class Shape:
def __init__(self, verts):
self.verts = verts
self.n = len(self.verts)
def calcSideLength(self,side):
if(0 <= side < self.n):
x1 = self.verts[side]
x2 = self.verts[side+1]
return math.sqrt((x1[0]-x2[0])**2 + (x1[1]-x2[1])**2)
class Triangle(Shape):
def __init__(self, verts):
Shape.__init__(self, verts)

def calculateArea(self):
side = []      
for i in range(self.n):
side.append(self.calcSideLength(i))
side.sort()
area = 1/2 * side[1]* side[0]
return area

代码不起作用,我不知道出了什么问题,任何人都可以帮忙吗

首先,您不使用 CamelCase 而是snake_case来命名方法。在编写代码之前阅读 PEP8。

此外,您不必使用超级调用覆盖父母的初始化,因为它是多余的

第三,当你尝试计算最后一个边长时,你会遇到一个问题,因为你必须 x1 是最后一个顶点,x2 是第一个顶点(这个逻辑不会出现在你的代码中)

第四,你用1/2 * side * heigth计算面积,但你的边都不代表高度,所以你必须使用苍鹭公式

S = sqrt(p * (p - a) * (p - b) * (p - c))

其中a, b, c边长和边长p = (a + b + c) / 2

考虑到上述所有内容,您的代码必须如下所示

import math

class Shape:
def __init__(self, verts):
self.verts = verts
self.n = len(self.verts)
def calc_side_length(self, side):
if 0 <= side < self.n - 1:
x1 = self.verts[side]
x2 = self.verts[side + 1]
elif side == self.n - 1:
x1 = self.verts[side]
x2 = self.verts[0]
else:
raise
return math.sqrt((x1[0] - x2[0]) ** 2 + (x1[1] - x2[1]) ** 2)

class Triangle(Shape):
def calculate_area(self):
sides = []
for i in range(self.n):
sides.append(self.calc_side_length(i))
p = sum(sides) / 2  # p = (a + b + c) / 2
return math.sqrt(p * (p - sides[0]) * (p - sides[1]) * (p - sides[2]))

最新更新