A

B

B

A

“Cat”

“Cat”

“Cat”

“Cat”

# Drag to move the trammel

G = (6.75965934940452, 0.04098726609739528)
α = 5.410520681182422 rad (slider from 0 to 6.283185307179586, step 0.017453292519943295)
a = Line((0, 0), (0, 1))
c = Circle((0, 0), 5)
b = Line((0, 0), (1, 0))
H = Intersect(b, a)
G' = Rotate(G, α, H)
l = Ray(H, G')
A = Intersect(c, l)
d = Distance((0, 0), A)
e = Circle(Midpoint[(0, 0), A], d / 2)
β = Angle(G, H, G')
C = Point(b)
f = Circle(H, C)
D = Intersect(f, a, 2)
E = Intersect(f, b, 2)
F = Intersect(f, a, 1)
I = Point(a)
J = Point(b)
K = Point(a)
L = Point(b)
g = Ray(D, I)
h = Ray(E, J)
i = Ray(F, K)
j = Ray(C, L)
B = Intersect(e, g)
M = Intersect(e, h)
N = Intersect(e, i)
O = Intersect(e, j)
m = Ray(N, M)
n = Ray(N, O)
p = Ray(B, O)
q = Ray(B, M)
r = Circle(M, 3)
P = Intersect(r, q, 2)
s = OrthogonalLine(P, q)
Shift = 5 (slider from 0.1 to 5, step 0.05)
t = Circle(P, Shift)
Q = Intersect(t, s, 2)
a_1 = Segment(B, P)
b_1 = Segment(P, Q)
c_1 = Circle(O, 3)
R = Intersect(c_1, p, 2)
d_1 = Circle(R, Shift)
e_1 = OrthogonalLine(R, p)
S = Intersect(d_1, e_1, 2)
f_1 = Segment(B, R)
g_1 = Segment(R, S)
h_1 = Circle(O, 3)
T = Intersect(h_1, n, 2)
k_1 = Circle(T, Shift)
i_1 = OrthogonalLine(T, n)
U = Intersect(k_1, i_1, 2)
j_1 = Segment(N, T)
l_1 = Segment(T, U)
p_1 = Circle(M, 3)
V = Intersect(p_1, m, 2)
q_1 = Circle(V, Shift)
m_1 = OrthogonalLine(V, m)
W = Intersect(q_1, m_1, 2)
n_1 = Segment(N, V)
r_1 = Segment(V, W)
loc1 = Locus(W, α)
loc2 = Locus(U, α)
loc3 = Locus(S, α)
loc4 = Locus(Q, α)