Гост написа:В една координатна система са дадени точките A(0;0) , B(10,0) ,C (4;8). Намерете координатите на центъра J на вписаната окръжност
Ще решим тази задача по един директен и особено труден начин.
По дефиниция центъра на вписаната окръжност (x,y) се намира на равно разстояние от 3-те страни. И това е всичко което ще използваме за решаване на задачата.
За да намерим този център ще започнем от намиране уравненията на правите в параметричен вид:
#-----------------------------------------------------------------------------------------------------------------
# всичко от тук което следва е валидна програма на Python
from sympy import *
var("x_c,y_c") # central circle variables - това което търсим
for i in range(1,4):
var(f"x_{i},y_{i},a_{i},b_{i},c_{i},d_{i},t_{i}") #all other variables
# прави в параметричен вид
L1x = x_1 - a_1*t_1 - b_1
L1y = y_1 - c_1*t_1 - d_1
L2x = x_2 - a_2*t_2 - b_2
L2y = y_2 - c_2*t_2 - d_2
L3x = x_3 - a_3*t_3 - b_3
L3y = y_3 - c_3*t_3 - d_3
# 3-те точки
A=(0,0); B=(10,0); C=(4,8)
# 3 сегмента
S1 = [A,B]
S2 = [B,C]
S3 = [C,A]
# първата система от уравнения
U=[
L1x.subs(x_1,S1[0][0]).subs(t_1,0),
L1x.subs(x_1,S1[1][0]).subs(t_1,1),
L1y.subs(y_1,S1[0][1]).subs(t_1,0),
L1y.subs(y_1,S1[1][1]).subs(t_1,1),
L2x.subs(x_2,S2[0][0]).subs(t_2,0),
L2x.subs(x_2,S2[1][0]).subs(t_2,1),
L2y.subs(y_2,S2[0][1]).subs(t_2,0),
L2y.subs(y_2,S2[1][1]).subs(t_2,1),
L3x.subs(x_3,S3[0][0]).subs(t_3,0),
L3x.subs(x_3,S3[1][0]).subs(t_3,1),
L3y.subs(y_3,S3[0][1]).subs(t_3,0),
L3y.subs(y_3,S3[1][1]).subs(t_3,1),
]
# решаваме я
sol=solve(U)
# заместваме да намерим конкретните прави
x1_t = solve(L1x.subs(sol),x_1)[0]
y1_t = solve(L1y.subs(sol),y_1)[0]
x2_t = solve(L2x.subs(sol),x_2)[0]
y2_t = solve(L2y.subs(sol),y_2)[0]
x3_t = solve(L3x.subs(sol),x_3)[0]
y3_t = solve(L3y.subs(sol),y_3)[0]
# разстояние от търсения център (x,y) до някаква точка от правата
R1 = (x_c-x1_t)**2 + (y_c-y1_t)**2
R2 = (x_c-x2_t)**2 + (y_c-y2_t)**2
R3 = (x_c-x3_t)**2 + (y_c-y3_t)**2
U2=[
R1.diff(t_1), # най-краткото разстояние намираме от производната
R2.diff(t_2),
R3.diff(t_3),
R1-R2, # две разстояния са еднакви
R2-R3, # други две разстояния са еднакви
]
# решаваме системата
r = solve(U2)
# имаме 4 реални резултата
res = [(float(d[x_c]),float(d[y_c])) for d in r]
# това е точка вътре в октъжността
M = [(A[0]+B[0]+C[0])/3,(A[1]+B[1]+C[1])/3]
# сортираме по най-кратко разстояние
res.sort(key= lambda P: (P[0]-M[0])**2 + (P[1]-M[1])**2)
# крайния резултат e това от 4-те решение което е най-близко до централната точка:
res[0]
#-----------------------------------------------------------------------------------------------------------------------------
In [2]: res[0]
Out[2]: (
4.47213595499958, 2.76393202250021)