jueves, 25 de junio de 2020

Triángulos heronianos


Esta es la última entrada del curso 2019-20. Como todos los veranos, nos tomamos un descanso de dos meses. En ellos se actualizarán las publicaciones ligadas al blog y se prepararán nuevos contenidos. Feliz descanso.


Un triángulo se califica de heroniano si las longitudes de sus lados y el valor de su área son números enteros. Es un concepto aritmético, por lo que se supone que esto ocurre con una unidad de medida adecuada. Consecuencia de esto es que también es entero el perímetro. A veces se consideran lados y área racionales, pero aquí nos limitaremos a los enteros positivos.

El nombre que les aplicamos es un recuerdo de Herón de Alejandría, autor de la popular fórmula para el área de un triángulo conocidos los lados a, b y c:


En esta fórmula, p es el semiperímetro. Si A y los lados son todos enteros, el triángulo será heroniano. Esto exige que p(p-a)(p-b)(p-c) sea un cuadrado perfecto.

Una primera clase de este tipo de triángulos lo constituyen los pitagóricos, ya que en una terna pitagórica (a, b, c), el área equivale a a*b/2, y en estas ternas siempre existe un cateto par


Por tanto, también será heroniano el formado adosando dos triángulos de este tipo para formar un triángulo isósceles. Así, (20, 26, 26) será de este tipo, porque la altura sobre el lado 20 sería 24, y el área 240.

Igualmente, se pueden adosar dos triángulos pitagóricos que tengan un cateto común, como (5, 12, 13) y (9, 12, 15), formando el triángulo (9+5, 13, 15), es decir, ordenando, (13, 14, 15), que sería heroniano.

Es evidente que, en una terna de lados en un triángulo heroniano, si los multiplicamos todos por un mismo factor, resultará otro heroniano, luego el número de estos será infinito. Llamaremos terna primitiva a aquella en la que los tres lados sean primos entre sí.

Hay ternas que no son pitagóricas, ni tampoco resultado de adosar rectángulos, como (5, 29, 30).  Estas reciben el nombre de indescomponibles.

Búsqueda de ternas heronianas

Para encontrar este tipo de ternas existen varios algoritmos, algunos muy eficientes. Nosotros aquí, ya que usamos hojas de cálculo, recurriremos a una rutina que escriba cada terna que encontremos en una columna de la hoja. Como existen infinitas ternas, buscaremos entre dos valores. En contra de la costumbre de este blog, usaremos una rutina (macro) en lugar de una función, para escribir los resultados directamente, sin esperar a que la función se evalúe. Lo efectuaremos así:

En las celdas A1 y A2 de la hoja de cálculo escribiremos dos extremos de un intervalo. Lo recorreremos asignando sus valores al lado mayor, y buscaremos una pareja de lados que con él forme un triángulo heroniano. Para ello buscaremos que p(p-a)(p-b)(p-c) sea cuadrado entero. También habrá que tener en cuenta la propiedad de los lados de que “uno de ellos es menor que la suma de los otros dos y mayor que su diferencia”. Este ha sido el algoritmo elegido:

Sub heroniano()  ‘Es rutina y no función. Deberemos ejecutarla como macro.
Dim t1, t2, a, b, c, p, m, fila, t3

t1 = ActiveWorkbook.Sheets(1).Cells(1, 1).Value ‘Se leen los dos extremos t1 y t2 en A1 y A2
t2 = ActiveWorkbook.Sheets(1).Cells(2, 1).Value
fila = 2 ‘Primera fila de resultados
For a = t1 To t2 ‘El lado a se mueve entre los dos extremos
For b = 1 To a ‘El lado b será menor o igual que a
If a = b Then t3 = 1 Else t3 = a - b + 1 ‘Se busca el inicio para el lado c
For c = t3 To b
p = (a + b + c) / 2 ‘Se calcula el semiperímetro
m = p * (p - a) * (p - b) * (p - c) ‘Cuadrado del área (fórmula de Herón)
If escuad(m) Then ‘Si es un cuadrado, es válida
fila = fila + 1 ‘Como hay solución, la fila avanza
ActiveWorkbook.Sheets(1).Cells(fila, 1).Value = a ‘Se escriben a, b, c y el área
ActiveWorkbook.Sheets(1).Cells(fila, 2).Value = b
ActiveWorkbook.Sheets(1).Cells(fila, 3).Value = c
ActiveWorkbook.Sheets(1).Cells(fila, 4).Value = Sqr(m)
End If
Next c
Next b
Next a
End Sub

En la imagen puedes consultar las ternas heronianas en las que el lado mayor está comprendido entre 20 y 25:



Junto a cada terna figura el área entera. Observamos la abundancia de ternas de este tipo, algo que al iniciar el estudio no se esperaba.

En la página correspondiente de Wikipedia puedes encontrar gran número de propiedades de estos triángulos. Nosotros seguiremos con búsquedas.

Búsqueda de lados conociendo el perímetro

Para esta cuestión volveremos a la estrategia frecuente en este blog de comenzar con una función. Dado un número N, devolverá el primer triángulo heroniano que encuentre cuyo perímetro coincida con N. Su desarrollo es similar a la rutina de más arriba.

Function pheroniano$(n)
Dim b, c, p, m, a
Dim s$
Dim es As Boolean


s$ = "": es = False
a = n – 2 ‘Comenzamos con el lado mayor a
While a > 1 And Not es
b = 1
While b <= a And Not es
c = n - b - a
If c < a + b And c > a - b Then ‘c es menor que la suma de los otros dos y mayor que su diferencia
p = n / 2
m = p * (p - a) * (p - b) * (p - c)
If escuad(m) Then es = True: s$ = s$ + Str$(a) + Str$(b) + Str$(c) + Str$(Sqr(m))
End If
b = b + 1
Wend
a = a - 1
Wend
If s = "" Then s = "NO"
pheroniano = s
End Function

Con esta función es fácil encontrar los primeros perímetros de triángulos heronianos, junto con sus lados y el área:


Por ejemplo, si el perímetro es 54, el semiperímetro será 27, y el producto 27*(27-26)(27-3)(27-25)=27*1*24*2=1296, cuadrado perfecto, y el área, 36, es entera.

Filtros

En la función anterior podemos introducir filtros para encontrar ternas que cumplan algunas propiedades. Omitimos su código porque no es difícil de reproducir.

Ternas primitivas

Si exigimos que los tres lados a, b y c sean primos entre sí, nos resultarán las ternas primitivas. Estas son las primeras:



Como en casos anteriores, la primera columna es el perímetro, y en la segunda figuran, por este orden, los tres lados y el área. Mentalmente se puede comprobar que los lados son primos entre sí.

Si comparamos con la tabla anterior, vemos, por ejemplo, que falta el 24, porque su terna 10, 6, 8 está formada por los dobles de 5, 4 y 3.

También es destacable que entre estos triángulos aparecen isósceles, como 6, 5, 5 o 24, 13, 13

Con ellos seguimos:

Triángulos isósceles

Por motivos obvios, un triángulo heroniano equilátero no puede existir, porque si el lado es entero, la altura es irracional, pero sí puede ser isósceles, como sería el resultado de adosar dos pitagóricos iguales.

En la búsqueda basta exigir como filtro que a=b o b=c o a=c. Vemos el resultado:


Aquí coinciden primitivas y no primitivas. En todas ellas uno de los lados iguales junto con la mitad del desigual formarán un triángulo pitagórico al adjuntarles la altura correspondiente al desigual. Por ejemplo. En 30, 17, 17, el lado 17 y la mitad del 30 forman la terna pitagórica (8, 15, 17)

Lados en progresión aritmética

Existen muchos ejemplos de ternas heronianas con lados en progresión aritmética, pues si son así los de una terna primitiva, lo serán los que son múltiplos de ellos. Por eso es preferible buscar solo entre las primitivas. Para eso, además de exigir que a, b y c sean primos entre sí, exigiremos que formen progresión, es decir, que la diferencia entre dos de ellos coincida con la formada por el tercero. Como no se tiene seguridad de si b>c o c>b, esta condición será doble.

Al implementarlo resultan estos primeros casos:



Vemos que comienzan con dos muy populares, como son 3, 4 y 5, con área 6, y 13, 14, 15, con área 84. No están ordenados. Según el algoritmo usado, el menor se ha escrito en el centro. Para ser primitivas, aparecen más de lo esperado.
Aquí finalizamos los filtros. No se ha intentado con números primos porque la única posibilidad es que uno de ellos fuera 2, y no existe ningún caso.

Números triángulo

Llamaremos números triangulo N a aquellos que se puedan representar como el producto de tres factores N=a*b*c tales que constituyan las medidas de los lados de un triángulo heroniano.

Por ejemplo, 13520=20*26*26, que puede representar un triángulo isósceles cuya altura mide 24, luego su área será entera, e igual a 24*20/2=240.

Si deseamos usar la fórmula de Herón hallaríamos el semiperímetro:
p=(20+26+26)/2=36

La fórmula de Herón se planteará en este caso como


Con vistas a encontrar números triángulo, debemos descomponer N en tres factores a, b y c, y exigir después que sea cuadrada la expresión p(p-a)(p-b)(p-c).

La siguiente función se basa en esa idea. Como todas las de este blog, está desarrollada para Excel y Calc, pero es fácil traducirla a otro lenguaje de programación. Lo hacemos así porque el blog va de hoja de cálculo.

Esta función, aplicada a N, devuelve un “NO” si no es número triángulo o una cadena con los tres lados si lo es.

Function esuntriangulo$(n)
Dim a, b, c, d, m, p
Dim es As Boolean
Dim s$

s = "" ‘Variable que devuelve la función
es = False ‘Control de final de búsqueda
a = 2 ‘Primer factor
While a <= n / 2 And Not es
m = n / a
If m = Int(m) Then ‘Se ve que a es un factor de n
b = 2 ‘Segundo factor
While b <= m / 2 And Not es
c = m / b ‘Tercer factor
If c = Int(c) Then ‘Si los tres son factores, se sigue
d = (a + b + c) / 2 ‘Cálculo del semiperímetro
p = d * (d - a) * (d - b) * (d - c) ‘Producto de Herón
If escuad(p) and p>0 Then ‘Si el producto es cuadrado, N cumple lo planteado
es = True ‘Se interrumpe la búsqueda
s = s + Str$(a) + Str$(b) + Str$(c) ‘Solución
End If
End If
b = b + 1
Wend
End If
a = a + 1
Wend
If s = "" Then s = "NO"
esuntriangulo = s
End Function

Aplicando esta función a los primeros números naturales obtendrás esta sucesión, que está publicada en http://oeis.org/A218243

60, 150, 200, 480, 780, 1200, 1530, 1600, 1620, 1690, 1950, 2040, 2100, 2730, 2860, 3570, 3840, 4050, 4056, 4200, 4350, 4624, 5100, 5400, 5460, 6240, 7500, 8120, 8250, 8670, 8750, 9600, 10812, 11050, 11900, 12180, 12240, 12800, 12960, 13260, 13520, 13650,…

El penúltimo de la lista es 13520, el que nos ha servido de ejemplo.

Por ejemplo, 60=3*4*5, terna pitagórica que representa a un triángulo de área 6.

Es evidente que si un número está en la lista, N=a*b*c, también estará N*k^3=ak*bk*ck. Por tanto, esta sucesión es infinita.


No hay comentarios: