计算四边形面积。

10

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

这是我用纸和笔会做的方式:

Area of a quadrilateral

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


2
使用2D点而不是角度和边长可能是更好的方法。当修改一个边但不调整相应的数据时,它可能导致无效的数据集。使用2D点,关系(角度和边长)是隐含的。 - Niklas R
给这张很棒的图片点个赞! - Gerrat
1
@Gerrat Paint 赢了,耶! - user2032433
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

是的,这也是我想的,我尝试了一下,但结果非常奇怪。在你的例子中,考虑边长为[3, 5, 5, 4]且面积仅为0.060806449423319364的情况?这是不可能的。 - user2032433
5
math.sin计算时使用的是弧度而不是角度! - core1024
@core1024 啊,现在感觉很蠢,当然...我该怎么转换它? - user2032433
2
谢谢大家,现在得到了正确的结果! :) 我应该接受core1024的评论哈哈 :D - user2032433

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接