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

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)))

使用海龙公式 - Reblochon Masque
2
@Reblochon Masque Heron的公式适用于已知边长而非坐标的情况。 - MBo
3个回答

4

为了避免负面积值(符号取决于方向而不是正/负坐标),必须在此公式中添加abs

如果您有顶点坐标,则此公式是正确的并实现了最佳方法。它基于叉积的属性。

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))))

1
几乎正确,但你需要在最后取绝对值。 你的公式可以从鞋带公式中推导出来,该公式适用于任何简单(没有交叉边缘,没有孔)的多边形。

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

或者,您可以使用海伦公式


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