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)))
3 Réponses :
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))))
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.
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
Vous pouvez également utiliser Herons Formula a >
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.