计算四边形的面积
Posted
技术标签:
【中文标题】计算四边形的面积【英文标题】:Calculate the area of a quadrilateral 【发布时间】:2013-03-25 05:48:36 【问题描述】:我正在尝试创建一个计算简单四边形面积的计算器。 我知道每个四边形都可以分成两个三角形,无论如何我应该能够计算出两部分的面积。 我可以在数学上做到这一点,但我不知道如何在 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()
来计算我的四边形的面积,但我不知道如何。
我会用纸和笔来做这件事:
基本上我只需要知道两个角度和三个边就可以使用这种技术来计算面积,但我们不用担心。 现在,我知道所有的角度和所有的边,我如何计算面积?
【问题讨论】:
使用 2D 点代替角度和边长可能是更好的方法。修改一侧但不调整相应数据时,可能会导致数据集无效。使用 2D 点,关系(角度和边长)是隐含的。 为一张很棒的照片点赞! @Gerrat Paint 为胜利而战,耶! 【参考方案1】:只需在您拥有的两个列表中直接访问边和角:
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
【讨论】:
是的,我也是这么想的,我也试过了,但它给出了一些非常奇怪的结果。在你的例子中,想想侧面[3, 5, 5, 4]
和区域只有0.060806449423319364
?不可能。
没有。 math.sin
以弧度而不是度数计算!
@core1024 啊哈,现在觉得自己很蠢,当然……我该如何转换呢?
谢谢大家,现在得到正确的结果! :) 我应该接受 core1024 的评论,哈哈:D【参考方案2】:
基于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))
【讨论】:
【参考方案3】:更好的解决方案是高斯正交。见第 17-10 页:
http://www.colorado.edu/engineering/cas/courses.d/IFEM.d/IFEM.Ch17.d/IFEM.Ch17.pdf
【讨论】:
以上是关于计算四边形的面积的主要内容,如果未能解决你的问题,请参考以下文章