Proc 58. Используя функции Leng и Perim из заданий Proc56 и Proc57, описать функцию \(\text{Area}(x_A, y_A, x_B, y_B, x_C, y_C)\) вещественного типа, находящую площадь треугольника ABC по формуле

\[S_{ABC} = \sqrt{p\cdot (p-|AB|)\cdot (p-|AC|)\cdot (p-|BC|)},\]

где p - полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Решение на Python 3

import math
import numpy as np
import random

def Leng(xA, yA, xB, yB):
d = math.sqrt((xA - xB)**2 + (yA - yB)**2)
return d

def Perim(xA, yA, xB, yB, xC, yC):
d_AB = Leng(xA, yA, xB, yB)
d_AC = Leng(xA, yA, xC, yC)
d_BC = Leng(xB, yB, xC, yC)
return d_AB + d_AC + d_BC

def Area(xA, yA, xB, yB, xC, yC):
d_AB = Leng(xA, yA, xB, yB)
d_AC = Leng(xA, yA, xC, yC)
d_BC = Leng(xB, yB, xC, yC)
p = Perim(xA, yA, xB, yB, xC, yC) / 2
S = math.sqrt(p*(p-d_AB)*(p-d_AC)*(p-d_BC))
return S


x1,x2,x3,y1,y2,y3 = list(np.random.choice(range(-10, 11), 6))
#x1,x2,x3,y1,y2,y3 = [0,3,0,0,0,4]
while (x3-x1)*(y2-y1) == (y3-y1)*(x2-x1):
x1,x2,x3,y1,y2,y3 = list(np.random.choice(range(-10, 11), 6))
x4, y4 = random.sample(range(-10, 11), 2)

A_x = x1
A_y = y1
B_x = x2
B_y = y2
C_x = x3
C_y = y3
D_x = x4
D_y = y4

##A_x = 0
##A_y = 0
##B_x = 0
##B_y = 3
##C_x = 4
##C_y = 0

print("Вершина A (x, y): ({0},{1})".format(A_x, A_y))
print("Вершина B (x, y): ({0},{1})".format(B_x, B_y))
print("Вершина C (x, y): ({0},{1})".format(C_x, C_y))
print("Вершина D (x, y): ({0},{1})".format(D_x, D_y))

p = Perim(A_x, A_y, B_x, B_y, C_x, C_y)
print("Периметр треугольника ABC: ", p)
S = Area(A_x, A_y, B_x, B_y, C_x, C_y)
print("Площадь треугольника ABC: ", S)
print()

p = Perim(A_x, A_y, B_x, B_y, D_x, D_y)
print("Периметр треугольника ABD: ", p)
S = Area(A_x, A_y, B_x, B_y, D_x, D_y)
print("Площадь треугольника ABD: ", S)
print()

p = Perim(A_x, A_y, C_x, C_y, D_x, D_y)
print("Периметр треугольника ACD: ", p)
S = Area(A_x, A_y, C_x, C_y, D_x, D_y)
print("Площадь треугольника ACD: ", S)
print()