"""Заданы координатывершин треугольника, вычеслить длинну биссектрисы из наменьшего угла треугольника 
при вычислении длин сторон использовать целые подкоренные выражения. Далее ввести 
координаты одной точки и определить находится она внутри треугольника или нет. Если находится, 
то определить расстояние до ближайшей стороны"""
import math
print("Введите координаты вершин")
# Ввод данных
x1,y1 = map(float,input("Введите координаты первой вершины ").split())
x2,y2 = map(float,input("Введите координаты второй вершины ").split())
x3,y3 = map(float,input("Введите координаты третьей вершины ").split())
if ((x1==x2==x3)or(y1==y2==y3)):
	print("Треугольник не существует")
else:
	# Вычисление длин сторон
	a=math.sqrt((x2-x1)**2+(y2-y1)**2)
	b=math.sqrt((x3-x2)**2+(y3-y2)**2)
	c=math.sqrt((x1-x3)**2+(y1-y3)**2)
	if((a!=0)or(b!=0)or(c!=0)or(a+b>c)or(b+c>a)or(c+a>b)): 
		# Против наименьшей стороны меньший угол=> через меньшую сторону она и проходит
		#L=math.sqrt(a*b*(a+b+c)*(a+b-c))/(a+b)  общая формула биссектрисы, где с сторона через которую она проходит
		if(a==min(a,b,c)) :
			L=math.sqrt(c*b*(c+b+a)*(c+b-a))/(c+b)
		elif(b==min(a,b,c)):
			L=math.sqrt(a*c*(a+c+b)*(a+c-b))/(a+c)
		elif(c==min(a,b,c)):
			L=math.sqrt(a*b*(a+b+c)*(a+b-c))/(a+b)
		print()
		print("Длина первой стороны равна "'{:.2f}'.format(a))
		print("Длина второй стороны равна "'{:.2f}'.format(b))
		print("Длина третьей стороны равна "'{:.2f}'.format(c))
		print("Длина биссектрисы треугольника из наим. угла=",'{:.2f}'.format(L))

		print()
	
		#Начало работы с четвертой точкой
		x4,y4 = map(float,input("Введите координаты дополнительной четвертой точки ").split())
	
		#общий вид прямой (х-х1)*(у2-у1)-(у-у1)*(х2-х1)=0 
		lineab = [x2 - x1, y2 - y1]
		linebc = [x3 - x2, y3 - y2]
		lineca = [x1 - x3, y1 - y3]
		#Проверка первой прямой
		loca = ((x4 - x1) * (lineab[1]) - (y4 - y1) * (lineab[0]))*	 ((-lineca[0]) * (lineab[1]) - (-lineca[1]) * (lineab[0])) >= 0 
		#Проверка второй прямой
		locb = ((x4 - x2) * (linebc[1]) - (y4 - y2) * (linebc[0]))*	 ((-lineab[0]) * (linebc[1]) - (-lineab[1]) * (linebc[0])) >= 0 
		#Проверка третьей прямой
		locc = ((x4 - x3) * (lineca[1]) - (y4 - y3) * (lineca[0]))*	 ((-linebc[0]) * (lineca[1]) - (-linebc[1]) * (lineca[0])) >= 0 
		if (loca==locb==locc==True):
			print ("Точка лежит внутри треугольника")
			# Поиск минимального расстояния (находим длины сторон, полупериметр, площадь по герону, и высоту из площади и стороны)
			#1 треугольник
			a1=math.sqrt((x2-x4)**2+(y2-y4)**2)
			b1=math.sqrt((x3-x2)**2+(y3-y2)**2)
			c1=math.sqrt((x4-x3)**2+(y4-y3)**2)
			p1=(a1+b1+c1)/2
			s1=math.sqrt(p1*(p1-a1)*(p1-b1)*(p1-c1))
			h1=2*s1/b1

		
			#2 треугольник
			a2=math.sqrt((x4-x1)**2+(y4-y1)**2)
			b2=math.sqrt((x3-x4)**2+(y3-y4)**2)
			c2=math.sqrt((x1-x3)**2+(y1-y3)**2)
			p2=(a2+b2+c2)/2
			s2=math.sqrt(p2*(p2-a2)*(p2-b2)*(p2-c2))
			h2=2*s2/c2

			#3 треугольник
			a3=math.sqrt((x2-x1)**2+(y2-y1)**2)
			b3=math.sqrt((x4-x2)**2+(y4-y2)**2)
			c3=math.sqrt((x1-x4)**2+(y1-y4)**2)
			p3=(a3+b3+c3)/2
			s3=math.sqrt(p3*(p3-a3)*(p3-b3)*(p3-c3))
			h3=2*s3/a3

			print("Минимальное расстояние от точки до стороны=", '{:.2f}'.format(min(h1,h2,h3)))
		else:
			print ("Точка лежит вне треугольника.")
	
	else:
		print("Треугольник не существует")

