Форум сайта python.su
0
Здравствуйте! Имеются координаты четырех точек, необходимо найти площади всевозможных треугольников(их всего 4 можно составить).
Делаю это так, напролом так сказать:
A = abs( x1*(y2 - y3) + x2*(y3 - y1) + x3*(y1 - y2) ) / 2.0
B = abs( x2*(y3-y4) + x3*(y4-y2) + x4*(x2 - y3) ) / 2.0
C = abs( x1*(y2 - y4) + x2*(y4 - y1) + x4*(y1 - y2) ) / 2.0
D = abs( x1*(y3-y4) + x3*(y4-y1) + x4*(x1 - y3) ) / 2.0
Вопрос, можно ли как то, например, определить функцию, таким образом, что она будет при вводе координат n точек считать площади всевозможных треугольников, то есть выдаст C из n по 3 результатов ?
Офлайн
857
>>> import itertools >>> >>> def triangle_square(point1, point2, point3): ... x1, y1 = point1 ... x2, y2 = point2 ... x3, y3 = point3 ... return abs((x1 * y2 - y1 * x2) ... + (x2 * y3 - y2 * x3) ... + (x3 * y1 - y3 * x1)) / 2 ... >>> a, b, c, d = (0, 0), (0, 2), (2, 0), (2, 8) >>> >>> out = [(i, triangle_square(*i)) ... for i in itertools.combinations((a, b, c, d), 3)] >>> out [(((0, 0), (0, 2), (2, 0)), 2.0), (((0, 0), (0, 2), (2, 8)), 2.0), (((0, 0), (2, 0), (2, 8)), 8.0), (((0, 2), (2, 0), (2, 8)), 8.0)] >>>
Офлайн