Para terminar con nuestro artículo vamos a necesitar hacer un poco de trampa. Hay que dedicar un tiempo a estudiar qué se hizo en el pasado con este problema. Encontraremos tres nombres propios Apolonio, Descartes y Soddy.
Apolonio de Perge (262-190 aC)
Los problemas de Apolonio (https://es.wikipedia.org/wiki/Problema_de_Apolonio) consisten en encontrar la circunferencia tangente a tres circunferencias dadas. Se tratan también los casos especiales en que alguna(s) de las circunferencias tienen radio cero (puntos) o infinito (rectas).
En nuestro caso se trataría de la resolución de tres circunferencias de radio no nulo y finito. Estos casos han trascendido hasta nuestros días. Aun siguen siendo imprescindibles en el estudio de Dibujo Técnico en Carreras Universitarias. Sobre todo, por la aplicación de conceptos como potencia e inversión.
René Descartes (1596-1650)
El teorema de los círculos de Descartes nos dará la clave del éxito de nuestro problema. Véase la página de la Wikipedia: https://es.wikipedia.org/w/index.php?title=Teorema_de_los_c%C3%ADrculos_de_Descartes&redirect=no. Es más completa la versión en ingés: https://en.wikipedia.org/wiki/Descartes%27_theorem
La formulación de las relaciones de los radios en juego es muy esplícita:
Siendo:
ki=1/ri
r1..3 =
radios de las cirfunferencias a tangenciar
r4 =
radios de la cirfunferencia tangente a las anteriores
Se cumple que:
(k1+k2+k3+k4)2=2(k12+k22+k32+k42)
Despejando k4:
k4 =
k1+k2+k3 ±
2(k1k2+k2k3+k3k1)1/2
La genialidad llega cuando consideramos zi=xi+yii siendo las parejas (xi,yi) las coordenadas de los centros de cada círculo.
Las relaciones anteriores pasan a ser:
(k1z1+k2z2+k3z3+k4z4)2=2(k12z12+k22z22+k32z32+k42z42)
y:
z4 = [
k1z1+k2z2+k3z3
±
2(k1z1k2z2+k2z2k3z3+k3z3k1z1)1/2]
/ k4
Frederick Soddy (1877-1956)
El caso de los circunferencia tangente a otras tres tangentes también fue estudiado por Frederick Soddy. Un premio Nobel en Química (1921) poco conocido. Recomiendo visitar https://ztfnews.wordpress.com/2014/07/28/el-beso-preciso-del-quimico-frederick-soddy/ y estudiar su trabajo. Muy interesante. Como todas las biografías de los grandes genios de entre-guerras.
Como obtener el centro y radio de forma práctica
Después de las pistas dadas por Descartes ya estamos en disposición de resolver nuestro problema:
Sub Circulos(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double, ByVal e As Double, ByVal f As Double, ByVal Ind As Integer)
Dim x(3), y(3), r(3), u(3), v(3), p(3), q(3) As Double
Ind = Ind - 1
k = 0:x(1) = a:y(1) = b:x(2) = c:y(2) = d:x(3) = e:y(3) = f
s = (Dist(x(1), y(1), x(2), y(2)) + Dist(x(2), y(2), x(3), y(3)) + Dist(x(3), y(3), x(1), y(1))) / 2
r(1) = s - Dist(x(3), y(3), x(2), y(2))
r(2) = s - Dist(x(1), y(1), x(3), y(3))
r(3) = s - Dist(x(1), y(1), x(2), y(2))
For i = 1 To 3
j = i + 1
If j >= 4 Then j = 1
Picture1.Line (x(i), y(i))-(x(j), y(j)), QBColor(8)
Picture1.Circle (x(i), y(i)), r(i), colore
Next i
If Ind <= 0 Then Exit Sub 'Para evitar recursividad infinita
Inicio de lka fórmula de Descartes
k1 = 1 / r(1):k2 = 1 / r(2):k3 = 1 / r(3)
K41 = k1 + k2 + k3 + 2 * Sqr(k1 * k2 + k2 * k3 + k3 * k1)
'K42 = k1 + k2 + k3 - 2 * Sqr(k1 * k2 + k2 * k3 + k3 * k1)
'La segunda solución no se utiliza (círculo exterior)
z(1) = 0:z(2) = 0: 'z se ha definido como matriz de numeros reales de forma global
n1 = x(1) * k1 + x(2) * k2 + x(3) * k3
n2 = y(1) * k1 + y(2) * k2 + y(3) * k3
Multiplicar x(1), y(1), x(2), y(2) 'llamada a la función de multiplicación de números complejos
M1 = z(1) * k1 * k2:M2 = z(2) * k1 * k2:Multiplicar x(2), y(2), x(3), y(3)
M1 = M1 + z(1) * k2 * k3:M2 = M2 + z(2) * k2 * k3:Multiplicar x(3), y(3), x(1), y(1)
M1 = M1 + z(1) * k1 * k3:M2 = M2 + z(2) * k1 * k3
Exponente M1, M2, 0.5, 0 'llamada a la función de esponenciación compleja
H1 = 2 * z(1):H2 = 2 * z(2)
o1 = (n1 + H1) / K41:o2 = (n2 + H2) / K41
Picture1.Circle (o1, o2), Abs(1 / K41), 16000000 * Rnd
'Llamadas siguientes
Circulos o1, o2, x(2), y(2), x(3), y(3), Ind
Circulos x(1), y(1), o1, o2, x(3), y(3), Ind
Circulos x(1), y(1), x(2), y(2), o1, o2, Ind
End Sub
Se han de definir las siguientes funciones:
Function Dist(ByVal a0 As Double, ByVal a1 As Double, ByVal a2 As Double, ByVal a3 As Double) As Double
Dist = Sqr((a0 - a2) ^ 2 + (a1 - a3) ^ 2)
End Function
Sub Multiplicar(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double)
z(1) = a * c - b * d
z(2) = a * d + c * b
End Sub
Sub Exponente(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double)
f = c * Log(Sqr(a * a + b * b)) - d * Atn2(b, a)
g = c * Atn2(b, a) + d * Log(Sqr(a * a + b * b))
z(1) = Cos(g) * Exp(f)
z(2) = Sin(g) * Exp(f)
End Sub
Function Atn2(ByVal y As Double, ByVal x As Double) As Double
vbpi = Atn(1) * 4
On Error GoTo derror
Atn2 = Atn(y / x)
If (x < 0) Then
If (y < 0) Then Atn2 = Atn2 - vbpi Else Atn2 = Atn2 + vbpi
End If
Exit Function
derror:
If Abs(y) > Abs(x) Then
If y > 0 Then Atn2 = vbpi / 2 Else Atn2 = -vbpi / 2
Else
Atn2 = 0
End If
Resume Next
End Function
Muestras de lo que obtendremos:
Habrá que seguir buscando y/o descubriendo más propiedades de estos burbucentros.
No hay comentarios:
Publicar un comentario