Apollóniova úloha

Řešení pomocí průsečíků kuželoseček, Gergonnovo řešení, dilatace a kruhová inverze.

Typ čáry značí orientaci cyklu, parametr d slouží k dilataci.

Přepínač r zobrazuje řešení.
Přepínač k zobrazuje 3 kuželosečky (každá z nich je množinou středů všech cyklů, které se dotýkají jedné dvojice daných cyklů).
Přepínač g zobrazuje Gergonnovu konstrukci (o je osa podobnosti daných cyklů; P_i jsou póly o vzhledem k daným kružnicím; P je potenční střed daných kružnic).

Pokud cykl c dilatuje do bodu, objeví se přepínače i, t, j pro zobrazení konstrukce pomocí kruhové inverze...

dilatace

m

m

n

n

zobrazit řešení

zobrazit kuželosečky

zobrazit gergonnovo řešení

m

m

n

n

střed stejnolehlosti cyklů a, b

osa podobnosti cyklů a, b, c

chordála a, b

potenční střed kružnic a, b, c

pól osy o vzhledem ke kružnici a

round_{koef} = 1000
B = (-149.78142443449724, -32.988549073311134)
r_b = 13 (slider from -30 to 30, step 1)
C = (-73.68377834638842, -15.370823544050797)
a_{hbc} = LineBisector(B, C)
r_c = -10 (slider from -30 to 30, step 1)
k_{bc}: sgn(abs(r_b - r_c) - Distance[B, C])
h_{bc} = If(k_{bc} > 0, Ellipse[B, C, abs(r_b - r_c) / 2], Hyperbola[B, C, abs(r_b - r_c) / 2])
r_a = 30 (slider from -30 to 30, step 1)
A = (-133.65178719379688, 23.757238966314407)
k_{ab}: sgn(abs(r_a - r_b) - Distance[A, B])
h_{ab} = If(k_{ab} > 0, Ellipse[A, B, abs(r_a - r_b) / 2], Hyperbola[A, B, abs(r_a - r_b) / 2])
a_{hab} = LineBisector(B, A)
k_{ac}: sgn(abs(r_a - r_c) - Distance[A, C])
h_{ac} = If(k_{ac} > 0, Ellipse[A, C, abs(r_a - r_c) / 2], Hyperbola[A, C, abs(r_a - r_c) / 2])
Prunik_{hbchacahab} = KeepIf(Distance[A, a_{hab}]  <  1 / round_{koef}, A, CAS_{Prushbchac})
Prunik_{habhbchac} = KeepIf(Distance[A, h_{ac}]  <  1 / round_{koef}, A, CAS_{Prushabhbc})
Prunik_{habhacahbc} = KeepIf(Distance[A, a_{hbc}]  <  1 / round_{koef}, A, CAS_{Prushabhac})
a_{hac} = LineBisector(A, C)
Prunik_{habhbcahac} = KeepIf(Distance[A, a_{hac}]  <  1 / round_{koef}, A, CAS_{Prushabhbc})
Prunik_{last} = KeepIf(Distance[A, a_{hac}]  <  1 / round_{koef}, A, CAS_{Prusahabahbc})
Stredy = If((r_a ≠ r_b) ∧ (r_b ≠ r_c) ∧ (r_a ≠ r_c), Prunik_{habhbchac}, If[(r_a ≠ r_b) ∧ r_a ≟ r_c, Prunik_{habhbcahac}, If[(r_a ≠ r_b) ∧ r_b ≟ r_c, Prunik_{habhacahbc}, If[r_a ≟ r_b ∧ (r_a ≠ r_c), Prunik_{hbchacahab}, Prunik_{last}]]])
Stred_2 = Element(Stredy, 2)
cN2_C: abs(Distance[Stred_2, C] + (k_{ab} * r_c))
cN2_B: abs(Distance[Stred_2, B] + (k_{ac} * r_b))
cN2_A: abs(Distance[Stred_2, A] + (k_{bc} * r_a))
Stred_1 = Element(Stredy, 1)
cN1_C: abs(Distance[Stred_1, C] + (k_{ab} * r_c))
cN1_B: abs(Distance[Stred_1, B] + (k_{ac} * r_b))
cN1_A: abs(Distance[Stred_1, A] + (k_{bc} * r_a))
cM2_C: abs(Distance[Stred_2, C] - (k_{ab} * r_c))
cM2_B: abs(Distance[Stred_2, B] - (k_{ac} * r_b))
cM2_A: abs(Distance[Stred_2, A] - (k_{bc} * r_a))
cM1_A: abs(Distance[Stred_1, A] - (k_{bc} * r_a))
cM1_B: abs(Distance[Stred_1, B] - (k_{ac} * r_b))
cM1_C: abs(Distance[Stred_1, C] - (k_{ab} * r_c))
d = 0 (slider from -30 to 30, step 1)
a = Circle(A, abs(d + r_a))
b = Circle(B, abs(d + r_b))
c = Circle(C, abs(d + r_c))
a_{-} = Circle(A, abs(d + r_a))
M_1 = If(round((cM1_A * round_{koef})) ≟ round((cM1_B * round_{koef})) ≟ round((cM1_C * round_{koef})), Stred_1)
b_{-} = Circle(B, abs(d + r_b))
M_2 = If(round((cM2_A * round_{koef})) ≟ round((cM2_B * round_{koef})) ≟ round((cM2_C * round_{koef})), Stred_2)
N_1 = If(round((cN1_A * round_{koef})) ≟ round((cN1_B * round_{koef})) ≟ round((cN1_C * round_{koef})), Stred_1)
N_2 = If(round((cN2_A * round_{koef})) ≟ round((cN2_B * round_{koef})) ≟ round((cN2_C * round_{koef})), Stred_2)
c_{-} = Circle(C, abs(d + r_c))
AB = Distance(A, B)
m_1 = Circle(M_1, abs(Distance[M_1, A] - (k_{bc} * (r_a + d))))
m_2 = Circle(M_2, abs(Distance[M_2, A] - (k_{bc} * (r_a + d))))
n_1 = Circle(N_1, abs(Distance[N_1, A] + (k_{bc} * (r_a + d))))
n_2 = Circle(N_2, abs(Distance[N_2, A] + (k_{bc} * (r_a + d))))
r = 1 (slider from 0 to 1, step 1)
k = 0 (slider from 0 to 1, step 1)
g = 0 (slider from 0 to 1, step 1)
A_{m1} = If(Defined[m_1], Intersect[m_1, a])
A_{n1} = If(Defined[n_1], Intersect[n_1, a])
A_{n2} = If(Defined[n_2], Intersect[n_2, a])
B_{n2} = If(Defined[n_2], Intersect[n_2, b])
B_{n1} = If(Defined[n_1], Intersect[n_1, b])
B_{m1} = If(Defined[m_1], Intersect[m_1, b])
B_{m2} = If(Defined[m_2], Intersect[m_2, b])
C_{m1} = If(Defined[m_1], Intersect[m_1, c])
C_{m2} = If(Defined[m_2], Intersect[m_2, c])
C_{n2} = If(Defined[n_2], Intersect[n_2, c])
C_{n1} = If(Defined[n_1], Intersect[n_1, c])
A_{m2} = If(Defined[m_2], Intersect[m_2, a])
am_1 = If(Defined[m_1], Ray[M_1, A])
am_2 = If(Defined[m_2], Ray[M_2, A])
an_1 = If(Defined[n_1], Ray[N_1, A])
an_2 = If(Defined[n_2], Ray[N_2, A])
bm_1 = If(Defined[m_1], Ray[M_1, B])
bm_2 = If(Defined[m_2], Ray[M_2, B])
bn_1 = If(Defined[n_1], Ray[N_1, B])
bn_2 = If(Defined[n_2], Ray[N_2, B])
cm_1 = If(Defined[m_1], Ray[M_1, C])
cm_2 = If(Defined[m_2], Ray[M_2, C])
cn_1 = If(Defined[n_1], Ray[N_1, C])
cn_2 = If(Defined[n_2], Ray[N_2, C])
m_{-1} = Circle(M_1, abs(Distance[M_1, A] - (k_{bc} * (r_a + d))))
m_{-2} = Circle(M_2, abs(Distance[M_2, A] - (k_{bc} * (r_a + d))))
n_{-1} = Circle(N_1, abs(Distance[N_1, A] + (k_{bc} * (r_a + d))))
n_{-2} = Circle(N_2, abs(Distance[N_2, A] + (k_{bc} * (r_a + d))))
v_{ab}: ((d + r_a) / (r_a - r_b) * Vector[A, B])
O_{ab} = If(g ≟ 1, Point[A, v_{ab}])
v_{ac}: ((d + r_a) / (r_a - r_c) * Vector[A, C])
v_{bc}: ((d + r_b) / (r_b - r_c) * Vector[B, C])
O_{ac} = If(g ≟ 1, Point[A, v_{ac}])
O_{bc} = If(g ≟ 1, Point[B, v_{bc}])
o = Line(O_{ab}, O_{ac})
lib = If(g ≟ 1, Circle[A, B, C])
Al_1, Al_2 = Intersect(lib, a)
Bl_1, Bl_2 = Intersect(lib, b)
Cl_1, Cl_2 = Intersect(lib, c)
Ch_{ab} = Intersect(Line[Al_1, Al_2], Line[Bl_1, Bl_2])
Ch_{ac} = Intersect(Line[Al_1, Al_2], Line[Cl_1, Cl_2])
Ch_{bc} = Intersect(Line[Bl_1, Bl_2], Line[Cl_1, Cl_2])
ch_{ab} = OrthogonalLine(Ch_{ab}, Line[A, B])
ch_{ac} = OrthogonalLine(Ch_{ac}, Line[A, C])
ch_{bc} = OrthogonalLine(Ch_{bc}, Line[B, C])
P = Intersect(ch_{ab}, ch_{ac})
P_a = Intersect(Polar[O_{ab}, a], Polar[O_{ac}, a])
P_b = Intersect(Polar[O_{ab}, b], Polar[O_{ac}, b])
P_c = Intersect(Polar[O_{ab}, c], Polar[O_{ac}, c])
p_a = Ray(P, P_a)
p_b = Ray(P, P_b)
p_c = Ray(P, P_c)
ch = 0
Ap_1, Ap_2 = Intersect(a, p_a)
Bp_1, Bp_2 = Intersect(b, p_b)
Cp_1, Cp_2 = Intersect(c, p_c)
i = 0 (slider from 0 to 1, step 1)
t = 0 (slider from 0 to 1, step 1)
j = 0 (slider from 0 to 1, step 1)
Γ = (-16.21455636102436, -11.89904358802627)
γ = If(i ≟ 1 ∧ d + r_c ≟ 0, Circle[C, Γ])
s_a = Line(C, A)
s_b = Line(C, B)
As_1, As_2 = Intersect(a, s_a)
Bs_1, Bs_2 = Intersect(b, s_b)
As'_1 = Mirror(As_1, γ)
As'_2 = Mirror(As_2, γ)
Bs'_2 = Mirror(Bs_2, γ)
Bs'_1 = Mirror(Bs_1, γ)
Oa' = Midpoint(As'_1, As'_2)
Ob' = Midpoint(Bs'_1, Bs'_2)
a' = Circle(Oa', As'_1)
b' = Circle(Ob', Bs'_1)
r'_a: ((-sgn(d + r_a)) * Radius[a'])
r'_b: ((-sgn(d + r_b)) * Radius[b'])
v'_{ab}: (r'_a / (r'_a - r'_b) * Vector[Oa', Ob'])
O_{a'b'} = If(t ≟ 1, Point[Oa', v'_{ab}])
m', n' = Tangent(O_{a'b'}, a')
A'_m = Intersect(a', m')
A'_n = Intersect(a', n')
B'_n, D = Intersect(b', n')
B'_m, E = Intersect(b', m')
am = Ray(C, A'_m)
an = Ray(C, A'_n)
bn = Ray(C, B'_n)
bm = Ray(C, B'_m)
A_m = Mirror(A'_m, γ)
A_n = Mirror(A'_n, γ)
B_n = Mirror(B'_n, γ)
B_m = Mirror(B'_m, γ)
Oab = Mirror(O_{a'b'}, γ)
mm_1, mm_2 = Intersect(γ, m')
nn_1, nn_2 = Intersect(γ, n')
oo = Ray(C, O_{a'b'})
a'_{-} = Circle(Oa', As'_1)
b'_{-} = Circle(Ob', Bs'_1)
Prus_{habhbc}: {Intersect[h_{ab}, h_{bc}]}
tmpprus: {Intersection[{Intersect[h_{ab}, h_{bc}]}, {Intersect[h_{ab}, h_{ac}]}]}