我正在尝试创建一个计算简单四边形区域的计算器。 我知道每个四边形都可以分成两个三角形,无论如何我应该能够分成两部分来计算。 我可以在数学中做到这一点,但我不知道如何将它实现到Python。
这是我的四边形课程:
class Quadrilateral(Shape):
def __init__(self, name):
# in clockwise order: angles[0], sides[0], angles[1], sides[1], ...
self.sides = [5] * 4
self.angles = [90] * 4
super().__init__(self, name)
现在我需要的是实现一个方法get_area()
,它计算我的四边形的面积,但我不知道如何。
以下是我用纸和笔做的方法:
基本上我只需要知道两个角度和三个侧面就可以使用这种技术来计算面积,但我们不用担心。 现在,我知道所有角度和所有方面,我该如何计算面积?
答案 0 :(得分:4)
只需直接访问您拥有的两个列表中的边和角度:
import math
area1 = 0.5 * self.sides[0] * self.sides[1] * math.sin(math.radians(self.angles[1]))
area2 = 0.5 * self.sides[2] * self.sides[3] * math.sin(math.radians(self.angles[3]))
area = area1 + area2
假设您的示例为sides = [3, 5, 5, 4]
和angles = [90, 95, 75, 100]
,则该区域为:
>>> import math
>>> sides = [3, 5, 5, 4]
>>> angles = [90, 95, 75, 100]
>>> area1 = 0.5 * sides[0] * sides[1] * math.sin(math.radians(angles[1]))
>>> area2 = 0.5 * sides[2] * sides[3] * math.sin(math.radians(angles[3]))
>>> area1 + area2
17.31953776581017
答案 1 :(得分:0)
更好的解决方案是高斯求积法。请参见第17-10页:
http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch17.d/IFEM.Ch17.pdf
答案 2 :(得分:0)
基于https://en.wikipedia.org/wiki/Brahmagupta%27s_formula
请参阅https://www.geeksforgeeks.org/maximum-area-quadrilateral/
def maxArea (a , b , c , d ):
# Calculating the semi-perimeter
# of the given quadilateral
semiperimeter = (a + b + c + d) / 2
# Applying Brahmagupta's formula to
# get maximum area of quadrilateral
return math.sqrt((semiperimeter - a) *
(semiperimeter - b) *
(semiperimeter - c) *
(semiperimeter - d))