从3个顶点计算三角形面积的正确方法

时间:2019-04-09 21:58:45

标签: python geometry

给定3个三角形点/顶点,这是计算三角形面积的正确方法吗?顶点永远不会是负值。

def triangle_area(tri):
    x1, y1, x2, y2, x3, y3 = tri[0][0], tri[0][1], tri[1][0], tri[1][1], tri[2][0], tri[2][1]
    return 0.5 * (((x2-x1)*(y3-y1))-((x3-x1)*(y2-y1)))

4 个答案:

答案 0 :(得分:0)

个人而言,我将对三角形的面积使用基本公式,即import { testWithModalLifecycle, ModalRootDomId } from './util'; describe('Modal', () => { testWithModalLifecycle() it('should render a modal', () => { const modalRootDom = document.getElementById(ModalRootDomId); expect(modalRootDom.outerHTML).toBe('<div id="myid"></div>'); // Success! }) }) 并围绕该公式开发代码。我们可以通过将x和y值存储在单独的列表中来找到高度和宽度,我们使用内置的base * height / 2max()函数,一旦知道了高度和宽度,我们就将它们相乘并除2点!

min()

无论这些点位于正/负空间中的哪个位置,这都应该可以正常工作!

使用here中的一个基本示例(示例2),我使用以下代码测试了代码:

def triangle_area(tri):
    y_list = [tri[0][1], tri[1][1], tri[2][1]]
    x_list = [tri[0][0], tri[1][0], tri[2][0]]
    height = max(y_list) - min(y_list)
    width = max(x_list) - min(x_list)
    return height * width / 2

预期产量my_tri = [[0, 0], [0, 9], [6, 0]] print(triangle_area(my_tri))

答案 1 :(得分:0)

有必要在此公式中添加abs,以免出现负面积值(符号取决于方向,而不取决于正/负坐标)

是的,这个公式是正确的,如果您有顶点坐标,它会实施最好的方法。它基于cross product属性。

def triangle_area(tri):
    x1, y1, x2, y2, x3, y3 = tri[0][0], tri[0][1], tri[1][0], tri[1][1], tri[2][0], tri[2][1]
    return abs(0.5 * (((x2-x1)*(y3-y1))-((x3-x1)*(y2-y1))))

答案 2 :(得分:0)

几乎,但是您需要在末尾取绝对值。 您可以从Shoelace formula得出公式,该公式适用于任何简单的(无交叉边,无孔)多边形。

答案 3 :(得分:0)

如果要计算三角形面积,则可以计算周围的矩形面积并减去周围有90°角的3个三角形:

def triangle_area(tri):
    x_min = min([point[0] for point in tri])
    x_max = max([point[0] for point in tri])
    y_min = min([point[1] for point in tri])
    y_max = max([point[1] for point in tri])
    area_rectangle = (y_max - y_min) * (x_max - x_min)
    t1 = 0.5 * abs((tri[0][0] - tri[1][0]) * (tri[0][1] - tri[1][1]))
    t2 = 0.5 * abs((tri[0][0] - tri[2][0]) * (tri[0][1] - tri[2][1]))
    t3 = 0.5 * abs((tri[1][0] - tri[2][0]) * (tri[1][1] - tri[2][1]))
    return area_rectangle - t1 - t2 - t3

enter image description here

或者,您可以使用Herons Formula