Правильный способ расчета площади треугольника из 3-х вершин - PullRequest
1 голос
/ 10 апреля 2019

Это правильный способ расчета площади треугольника по 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)))

Ответы [ 3 ]

0 голосов
/ 10 апреля 2019

Необходимо добавить 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))))
0 голосов
/ 10 апреля 2019

Почти, но вам нужно взять абсолютное значение в конце.Ваша формула может быть получена из формулы шнурка , которая применяется к любому простому (без пересекающихся ребер, без отверстий) многоугольника.

0 голосов
/ 10 апреля 2019

Лично я бы использовал базовую формулу для площади треугольника, которая равна base * height / 2, и разработал бы мой код вокруг этого. Мы могли бы найти высоту и ширину, сохраняя значения x и y в отдельных списках, для которых мы используем встроенные функции max() и min(), и как только мы узнаем высоту и ширину, мы просто умножаем их и делим на 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

Это должно работать нормально независимо от того, где точки расположены также в положительном / отрицательном пространстве!

Используя базовый пример из здесь (пример 2) Я проверил свой код с помощью:

my_tri = [[0, 0], [0, 9], [6, 0]]
print(triangle_area(my_tri))

Что дает 27.0 как ожидалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...