kigdocument.noaxes()
kigdocument.nogrid()

A = Point(-1., 0., name="A")
B = Point(1., 0., name="B")

s = Segment(A,B)
P = ConstrainedPoint(0.7, s)

kigdocument.hideobjects()

C1 = s.midpoint()
C2 = MidPoints(A,P)
C3 = MidPoints(P,B)

c1 = Circle(C1,A, VISIBLE)
c2 = Circle(C2,A, VISIBLE)
c3 = Circle(C3,B, VISIBLE)

invc = Circle(A,B)

r1 = CircularInversion(c1,invc, VISIBLE)
r2 = CircularInversion(c2,invc, VISIBLE)
d0 = CircularInversion(c3,invc, VISIBLE)

Pinv = InvertPoint(P,invc)
C4 = MidPoints(B,Pinv)

l = Orthogonal(s,C4)
D = ConicLineIntersection(d0,l,1)
E = ConicLineIntersection(d0,l,-1)

vec = Vector(D,E)
mvec = Vector(E,D)
kigdocument.showobjects()
Pcontrol = ConstrainedPoint(0.5,r2,name="P")
vec2 = Vector(Pinv,Pcontrol,shown=False)

d = Translate(d0,vec2)
CircularInversion(d,invc)
dsaved = d

for n in range(100):
  dnew = Translate(d,vec)
  if n > 0:
    dnew.hide()
  c = CircularInversion(dnew,invc)
  d = dnew

d = dsaved

for n in range(100):
  dnew = Translate(d,mvec)
  if n > 0:
    dnew.hide()
  c = CircularInversion(dnew,invc)
  d = dnew
