6 votos

Generador de triángulos heronianos

Estoy resolviendo los problemas de mi código que escribí para generar todos los triángulos heronianos (triángulo con lados enteros y área entera). Estoy usando el siguiente algoritmo

$$a=n(m^{2}+k^{2})$$ $$b=m(n^{2}+k^{2})$$ $$c=(m+n)(mn-k^{2})$$ $$\text{Semiperimeter}=mn(m+n)$$ $$\text{Area}=mnk(m+n)(mn-k^{2})$$

para los enteros $m$ , $n$ y $k$ con sujeción a las limitaciones:

$$\gcd{(m,n,k)}=1$$ $$mn > k^2 \ge m^2n/(2m+n)$$ $$m \ge n \ge 1$$

que encontré aquí http://en.wikipedia.org/wiki/Integer_triangle#Heronian_triangles

La parte impar es que este algoritmo no parece generar nunca 7, 24, 25 que es un Triángulo de Héroe (un triángulo rectángulo, de hecho) con área entera 84.

Originalmente había asumido que era un fallo en mi código, pero luego me di cuenta de que no puedo encontrar ningún valor de $m$ , $n$ o $k$ dentro de las restricciones o incluso ignorando las restricciones que generan este triángulo.

No sé cuál es entre cuál de los 7, 24 o 25 es igual al $a$ , $b$ o $c$ pero he intentado resolver manualmente para $m$ y $n$ utilizando wolframalpha. Desde $a$ y $b$ son simétricos (ya que $m$ y $n$ son simétricos cuando se ignoran las restricciones), realmente sólo tengo 3 conjuntos de ecuaciones lineales para comprobar:

$$7=n(m^{2}+k^{2})$$ $$24=m(n^{2}+k^{2})$$ $$25=(m+n)(mn-k^{2})$$

Wolframalpha - Ecuaciones lineales 1

$$24=n(m^{2}+k^{2})$$ $$25=m(n^{2}+k^{2})$$ $$7=(m+n)(mn-k^{2})$$

Wolframalpha - Ecuaciones lineales 2

$$25=n(m^{2}+k^{2})$$ $$7=m(n^{2}+k^{2})$$ $$24=(m+n)(mn-k^{2})$$

Wolframalpha - Ecuaciones lineales 3

Ninguna de ellas tiene soluciones enteras.

¿Está mal mi comprensión de los Triángulos de los Héroes? ¿Está mal el algoritmo? ¿Mi implementación es incorrecta?

4voto

Patrick Puntos 116

Este algoritmo no genera triángulos primitivos ( $\text{gcd}(a,b,c)=1$ ), y de hecho NO genera 7, 24, 25 (como has demostrado). En cambio, genera 14, 48, 50 cuando $m=7$ , $n=1$ , $k=1$ .

Parece que cuando dicen que "Todos los triángulos heronianos pueden generarse como múltiplos de" esta fórmula, no están contando simplemente los múltiplos enteros (como 2*14, 2*48, 2*50), sino que están contando esto como .5*14, .5*48, .5*50, que es el triángulo que estabas buscando, 7, 24, 25. Para llegar al triángulo primitivo en cada caso generado puedes dividir por el máximo común divisor de los 3 lados.

3voto

user8269 Puntos 46

Quizás estas fórmulas, publicadas por H Schubert en 1905, sean mejores: $$a=mn(p^2+q^2);\quad b=pq(m^2+n^2);\quad c=(mq+np)(mp-nq)$$ con $\gcd(m,n)=1$ . Entonces $m=n=1$ , $p=4$ , $q=3$ da $a=25$ , $b=24$ , $c=7$ .

2voto

El artículo de Schubert puede consultarse en línea aquí: http://www.oocities.org/teufel_pi/papers/gidag.pdf

Tenga en cuenta que $\gcd(p,q=1)$ también. Este enfoque tiene el mismo problema que la parametrización de Brahmagupta: no se generan directamente todos los triángulos de garza primitivos. En particular, el triángulo 13,14,15 se genera como el triángulo 26,28,30 con los parámetros m=2, n=1, p=3, q=2.

Sascha Kurz habla del tema aquí: http://www.wm.uni-bayreuth.de/fileadmin/Sascha/Publikationen/On_Heronian_Triangles.pdf

Da un algoritmo O(N^(2+e)) para generar triángulos con lados menores que N.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X