Python
import matplotlib.pyplot as plt
import numpy as np


# def distancia(x1, y1, x2, y2):
   # return np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)



# Solicitar las coordenadas de los vértices al usuario
# cola
x1, y1 =map(float, input("Introduce las coordenadas del vértice A (x1, y1): ").split())                   #[1,3]
x2, y2 =map(float, input("Introduce las coordenadas del vértice A (x2, y2): ").split())                   #[1,6]
x3, y3 =map(float, input("Introduce las coordenadas del vértice A (x3, y3): ").split())                   #[3,4.5]

# parte1 del cuerpo - ocupa el ultimo vertice x3
x4, y4 =map(float, input("Introduce las coordenadas del vértice A (x4, y4): ").split())              #[5,3]
x5, y5 =map(float, input("Introduce las coordenadas del vértice A (x5, y5): ").split())              #[5,6]


# parte2 "aletainferior" del cuerpo - ocupa el vertice x4
x6, y6 =map(float, input("Introduce las coordenadas del vértice A (x6, y6): ").split())            #[5,1]
x7, y7 =map(float, input("Introduce las coordenadas del vértice A (x7, y7): ").split())            #[7,3]

# parte3 "aletasuperior" del cuerpo - ocupa el vertice x5
x8, y8 = map(float, input("Introduce las coordenadas del vértice A (x8, y8): ").split())       #[5,8]
x9, y9 = map(float, input("Introduce las coordenadas del vértice A (x9, y9): ").split())       #[7,6]

# pico

x10,y10 =map(float, input("Introduce las coordenadas del vértice A (x10, y10): ").split())           #[9,4.5]

# distancias:
# primer triangulo
a = np.sqrt((x2 - x1)**2 + (y2 - y1)**2)
b =np.sqrt((x3 - x2)**2 + (y3 - y2)**2)
c =np.sqrt((x3 - x1)**2 + (y3 - y1)**2)


# segundo triangulo
d =np.sqrt((x4 - x3)**2 + (y4 - y3)**2)
e =np.sqrt((x5 - x4)**2 + (y5 - y4)**2)
f =np.sqrt((x5 - x3)**2 + (y5 - y3)**2)



# rectangulo
h =np.sqrt((x9 - x5)**2 + (y9 - y5)**2)
g =np.sqrt((x7 - x4)**2 + (y7 - y4)**2)
i =np.sqrt((x9 - x7)**2 + (y9 - y7)**2)
r1 =np.sqrt((x5 - x7)**2 + (y5 - y7)**2)


# triangulo superior
j =np.sqrt((x5 - x8)**2 + (y5 - y8)**2)
k =np.sqrt((x9 - x8)**2 + (y9 - y8)**2)

# triangulo inferior
l =np.sqrt((x4 - x6)**2 + (y4 - y6)**2)
m =np.sqrt((x7 - x6)**2 + (y7 - y6)**2)


# triangulo enfrente
n =np.sqrt((x10 - x7)**2 + (y10 - y7)**2)
ñ =np.sqrt((x10 - x9)**2 + (y10 - y9)**2)




# triangulo cola
angulo1 = np.degrees(np.arccos((a**2 + c**2 - b**2) / (2 * a * c)))
angulo2 = np.degrees(np.arccos((a**2 + b**2 - c**2) / (2 * a * b)))
angulo3 = np.degrees(np.arccos((c**2 + b**2 - a**2) / (2 * c * b)))

# triangulo segundo
angulo4 = np.degrees(np.arccos((f**2 + d**2 - e**2) / (2 * f * d)))
angulo5 = np.degrees(np.arccos((d**2 + e**2 - f**2) / (2 * d * e)))
angulo6 = np.degrees(np.arccos((f**2 + e**2 - d**2) / (2 * f * e)))

# triangulo 1 de rectangulo
angulo7 = np.degrees(np.arccos((r1**2 + e**2 - g**2) / (2 * r1 * e)))
angulo8 = np.degrees(np.arccos((e**2 + g**2 - r1**2) / (2 * e * g)))
angulo9 = np.degrees(np.arccos((g**2 + r1**2 - e**2) / (2 * g * r1)))

# triangulo 2 de rectangulo
angulo10 = np.degrees(np.arccos((r1**2 + i**2 - h**2) / (2 * r1 * i)))
angulo11 = np.degrees(np.arccos((h**2 + i**2 - r1**2) / (2 * h * i)))
angulo12 = np.degrees(np.arccos((h**2 + r1**2 - i**2) / (2 * h * r1)))

# triangulo superior
angulo13 = np.degrees(np.arccos((h**2 + j**2 - k**2) / (2 * h * j)))
angulo14 = np.degrees(np.arccos((h**2 + k**2 - j**2) / (2 * h * k)))
angulo15 = np.degrees(np.arccos((j**2 + k**2 - h**2) / (2 * j * k)))

# triangulo inferior
angulo16 = np.degrees(np.arccos((l**2 + g**2 - m**2) / (2 * l * g)))
angulo17 = np.degrees(np.arccos((l**2 + m**2 - g**2) / (2 * l * m)))
angulo18 = np.degrees(np.arccos((m**2 + g**2 - l**2) / (2 * m * g)))

# triangulo delantero
angulo19 = np.degrees(np.arccos((i**2 + n**2 - ñ**2) / (2 * i * n)))
angulo20 = np.degrees(np.arccos((n**2 + ñ**2 - i**2) / (2 * n * ñ)))
angulo21 = np.degrees(np.arccos((ñ**2 + i**2 - n**2) / (2 * ñ * i)))










plt.figure()
plt.plot([x1, x2, x3, x1], [y1, y2, y3, y1], marker='o', linestyle='-')


plt.plot([x3, x4, x5, x3], [y3, y4, y5, y3], marker='o', linestyle='-')


plt.plot([x4, x7, x9, x5], [y4, y7, y9, y5], marker='o', linestyle='-')


plt.plot([x4, x6, x7], [y4, y6, y7], marker='o', linestyle='-')




plt.plot([x5, x8, x9], [y5, y8, y9], marker='o', linestyle='-')


plt.plot([x7, x10, x9], [y7, y10, y9], marker='o', linestyle='-')

plt.plot ([x5,x7],[y5,y7],marker='o', linestyle='-')
# primer triangulo(cola)
plt.text (0.2,4.5, f"a: {a}")
plt.text (2,5.7, f"b: {b}")
plt.text (2,3.2, f"c: {c}")


# segundo tringulo (junto la cola)
plt.text (3.9,3, f"d: {d}")
plt.text (5.1,4.5, f"e: {e:.2f}")
plt.text (3.7,5.5, f"f: {f:.2f}")

# rectangulo
plt.text (6,3.2, f"g: {g:.2f}")
plt.text (6,6.2, f"h: {h}")
plt.text (7,4.5, f"i: {i}")
plt.text (5.9,5, f"dv: {r1:.1f}")

# triangulo superior
plt.text (4,7, f"j: {j}")
plt.text (6,7, f"k: {k:.1f}")



# triangulo inferior0
plt.text (4,2, f"l: {l}")
plt.text (6,2, f"m: {m:.1f}")


# triangulo enfrente
plt.text (8,3.2, f"n: {n}")
plt.text (8,5.6, f"ñ: {ñ:.1f}")



# angulos triangulo cola
plt.text (0.8,3.1, f"Ang1: {angulo1:.1f}")
plt.text (0.8,6, f"Ang2: {angulo2:.1f}")
plt.text (2,4.5, f"Ang3: {angulo3:.1f}")

# angulos triangulo 2
plt.text (3,4.5, f"Ang4: {angulo4:.1f}")
plt.text (4.5,3.5, f"Ang5: {angulo5:.1f}")
plt.text (4.5,5, f"Ang6: {angulo6:.1f}")

# angulos triang 1 -rectangulo
plt.text (5,5.3, f"Ang7: {angulo7:.1f}")
plt.text (5,3.1, f"Ang8: {angulo8:.1f}")
plt.text (6.5,3.1, f"Ang9: {angulo9:.1f}")

# angulos triang 2 -rectangulo
plt.text (6.7,3.8, f"Ang10: {angulo10:.1f}")
plt.text (6.6,5.7, f"Ang11: {angulo11:.1f}")
plt.text (5.3,5.7, f"Ang12: {angulo12:.1f}")

# angulos triang superior
plt.text (5,6.1, f"Ang13: {angulo13:.1f}")
plt.text (6.5,6.1, f"Ang14: {angulo14:.1f}")
plt.text (5,7.8, f"Ang15: {angulo15:.1f}")

# angulos triang inferior
plt.text (5,2.9, f"Ang16: {angulo16:.1f}")
plt.text (4.7,1.2, f"Ang17: {angulo17:.1f}")
plt.text (6.4,2.3, f"Ang18: {angulo18:.1f}")

# angulos triang inferior
plt.text (7,3.1, f"Ang19: {angulo19:.1f}")
plt.text (8.3,4.5, f"Ang20: {angulo20:.1f}")
plt.text (7,5.6, f"Ang21: {angulo21:.1f}")












plt.grid(True)
plt.title('Triángulo con Cálculo de Ángulos y Longitudes')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()