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.