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:
Publicar un comentario