2
votes

Méthode correcte pour calculer l'aire du triangle à partir de 3 sommets

Est-ce la bonne façon de calculer l'aire d'un triangle compte tenu des 3 points / sommets du triangle? Les sommets ne seront jamais des valeurs négatives.

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


2 commentaires

utiliser la formule du héron


La formule de @Reblochon Masque Heron convient lorsque quelqu'un a des longueurs de côté et non des coordonnées.


3 Réponses :


2
votes

Il faut ajouter abs à cette formule pour éviter une valeur de surface négative (le signe dépend de l'orientation, pas des coordonnées positives / négatives)

Oui, cette formule est correcte et elle met en œuvre la meilleure approche si vous avez des coordonnées de sommets. Il est basé sur les propriétés des produits croisés .

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


0 commentaires

1
votes

Presque, mais vous devez prendre la valeur absolue à la fin. Votre formule peut être dérivée de la formule Shoelace qui s'applique à tout simple (pas d'arêtes croisées , pas de trous) polygone.


0 commentaires

0
votes

Si vous souhaitez calculer une zone de triangles, vous pouvez calculer la zone des rectangles environnants et soustraire les 3 triangles qui ont des angles de 90 ° autour d'elle:

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

 entrez la description de l'image ici

Vous pouvez également utiliser Herons Formula a >


0 commentaires