9

我正在尝试创建一个计算简单四边形面积的计算器。我知道每个四边形都可以分成两个三角形,无论如何我应该能够计算出两部分的面积。我可以在数学上做到这一点,但我不知道如何在 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()计算四边形面积的方法,但我不知道如何。

这是我用纸和笔做的方法:

四边形的面积

基本上我只需要知道两个角度和三个边就可以使用这种技术来计算面积,但我们不用担心。现在,我知道所有的角度和所有的边,我如何计算面积?

4

3 回答 3

5

只需在您拥有的两个列表中直接访问边和角度:

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
于 2013-04-03T14:01:30.030 回答
1

基于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)) 
于 2019-11-15T16:08:41.637 回答
0

更好的解决方案是高斯正交。请参见第 17-10 页:

http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch17.d/IFEM.Ch17.pdf

于 2013-04-03T22:51:44.347 回答