Proc 60. Используя функцию Dist из задания Proc59, описать процедуру \(\text{Heights}(x_A, y_A, x_B, y_B, x_C, y_C, h_A, h_B, h_C)\), находящую высоты \(h_A\), \(h_B\), \(h_C\) треугольника ABC (выходные параметры), проведенные соответственно из вершин A, B, C (их координаты являются входными параметрами). С помощью этой процедуры найти высоты треугольников 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

def Dist(xP, yP, xA, yA, xB, yB):
S_PAB = Area(xA, yA, xB, yB, xP, yP)
d_AB = Leng(xA, yA, xB, yB)
d_P_AB = 2 * S_PAB / d_AB
return d_P_AB

def Heights(xA, yA, xB, yB, xC, yC):
h_A = Dist(xA, yA, xB, yB, xC, yC)
h_B = Dist(xB, yB, xA, yA, xC, yC)
h_C = Dist(xC, yC, xA, yA, xB, yB)
return [h_A, h_B, h_C]


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))

A_x = x1
A_y = y1
B_x = x2
B_y = y2
C_x = x3
C_y = y3

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

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))
hA, hB, hC = Heights(A_x, B_y, B_x, B_y, C_x, C_y)
print("Высота hA: ", hA)
print("Высота hB: ", hB)
print("Высота hC: ", hC)