Sine Wag the Dog

Don't reject an imprecise sinewave... see what it means for the "circle"

drag

stroke1 = PolyLine((0, 0), (NaN, NaN), (0, 0), (0, 0.07386953276919783), (0, 0.14773906553839578), (0, 0.22160859830759372), (0.03693476638459886, 0.3324128974613907), (0.07386953276919789, 0.4062824302305885), (0.11080429915379691, 0.48015196299978646), (0.1846738319229949, 0.5909562621535833), (0.1846738319229949, 0.6648257949227815), (0.295478131076792, 0.7756300940765786), (0.295478131076792, 0.8494996268457767), (0.40628243023058896, 0.9233691596149747), (0.40628243023058896, 0.997238692384173), (0.480151962999787, 0.997238692384173), (0.5540214957689851, 1.0341734587687719), (0.5909562621535841, 1.1080429915379697), (0.664825794922782, 1.1819125243071675), (0.7386953276919801, 1.2188472906917664), (0.8494996268457771, 1.2557820570763654), (0.8494996268457771, 1.3296515898455636), (0.9233691596149751, 1.3665863562301626), (0.9972386923841732, 1.4035211226147615), (1.0711082251533712, 1.4404558889993604), (1.1449777579225693, 1.4404558889993604), (1.2188472906917673, 1.4773906553839593), (1.2927168234609654, 1.4773906553839593), (1.3665863562301634, 1.4773906553839593), (1.4404558889993613, 1.4773906553839593), (1.5143254217685593, 1.4404558889993604), (1.6989992536915548, 1.3665863562301626), (1.8836730856145487, 1.3665863562301626), (1.9575426183837474, 1.3296515898455636), (2.068346917537544, 1.2927168234609643), (2.179151216691341, 1.2557820570763654), (2.2899555158451386, 1.2188472906917664), (2.3638250486143364, 1.1449777579225686), (2.4376945813835342, 1.0711082251533708), (2.511564114152732, 0.997238692384173), (2.58543364692193, 0.8864343932303758), (2.6962379460757275, 0.7386953276919795), (2.8070422452295243, 0.6648257949227815), (2.843977011614123, 0.5909562621535833), (3.0286508435371187, 0.4062824302305885), (3.1763899090755143, 0.22160859830759372), (3.250259441844712, 0.14773906553839578), (3.3979985073831087, 0.07386953276919783), (3.5088028065369055, 0), (3.619607105690703, -0.11080429915379697), (3.7304114048445, -0.22160859830759383), (3.804280937613698, -0.2954781310767918), (3.9520200031520942, -0.44321719661518766), (4.062824302305891, -0.44321719661518766), (4.173628601459688, -0.5540214957689845), (4.284432900613485, -0.6278910285381825), (4.432171966151882, -0.7386953276919793), (4.50604149892108, -0.7756300940765783), (4.616845798074877, -0.8494996268457762), (4.764584863613273, -0.9972386923841721), (4.912323929151668, -1.0711082251533701), (4.986193461920866, -1.108042991537969), (5.060062994690066, -1.144977757922568), (5.207802060228461, -1.2557820570763645), (5.318606359382258, -1.2927168234609634), (5.429410658536055, -1.3296515898455623), (5.6140844904590494, -1.4035211226147601), (5.761823555997447, -1.440455888999359), (5.9464973879204415, -1.477390655383958), (6.020366920689639, -1.514325421768557), (6.094236453458837, -1.5512601881531558), (6.278910285381832, -1.5881949545377547), (6.3527798181510295, -1.5881949545377547), (6.426649350920229, -1.6251297209223536), (6.537453650074026, -1.6620644873069526), (6.685192715612422, -1.6989992536915515), (6.759062248381619, -1.6989992536915515), (6.869866547535416, -1.7359340200761508), (6.980670846689213, -1.7359340200761508), (7.091475145843011, -1.7728687864607497), (7.165344678612209, -1.7728687864607497), (7.313083744150605, -1.8098035528453487), (7.423888043304402, -1.8098035528453487), (7.4977575760735995, -1.8098035528453487), (7.645496641611995, -1.8098035528453487), (7.756300940765794, -1.8098035528453487), (7.8301704735349915, -1.8098035528453487), (7.977909539073387, -1.8098035528453487), (8.051779071842585, -1.8098035528453487), (8.125648604611783, -1.7728687864607497), (8.27338767015018, -1.7359340200761508), (8.458061502073175, -1.6620644873069526), (8.531931034842373, -1.6251297209223536), (8.60580056761157, -1.6251297209223536), (8.716604866765367, -1.5512601881531558), (8.790474399534565, -1.514325421768557), (8.864343932303763, -1.477390655383958), (9.01208299784216, -1.4035211226147601), (9.085952530611358, -1.3665863562301608), (9.270626362534351, -1.2557820570763645), (9.34449589530355, -1.218847290691766), (9.455300194457347, -1.144977757922568), (9.529169727226545, -1.108042991537969), (9.67690879276494, -0.9972386923841721), (9.750778325534139, -0.9972386923841721), (9.861582624687935, -0.8864343932303753), (9.898517391072534, -0.8125648604611773), (9.972386923841732, -0.7017605613073804), (10.08319122299553, -0.6278910285381825), (10.157060755764729, -0.5540214957689845), (10.193995522149327, -0.4801519629997866), (10.230930288533926, -0.40628243023058874), (10.267865054918525, -0.33241289746139074), (10.304799821303124, -0.25854336469219286), (10.341734587687723, -0.1846738319229949), (10.341734587687723, -0.11080429915379697), (10.378669354072322, -0.03693476638459903), (10.378669354072322, 0.07386953276919783), true)
A = Point(stroke1)
B = Point(stroke1)
C = Point(stroke1)
a = PathParameter(C)
D = Point(xAxis)
E: (x(C), 0)
f = Segment(C, E)
b = If(a ≤ 0.75, a + 0.25, a - 0.75)
F = Point(stroke1, b)
G: (x(F), 0)
g = Segment(G, F)
c = Circle(D, g)
H = Intersect(c, xAxis, 2)
k = Segment(D, H)
l = Ray(D, (0, 0))
D' = Rotate(D, ((a * 2) * π), D)
I = Rotate((0, 0), ((a * 2) * π), D)
l' = Ray(D', I)
K = Intersect(c, l', 1)
L: (x(K), 0)
m = Ray(D, L)
M = Intersect(c, m)
d = Circle(M, f)
u = Vector(E, C)
v = Vector(G, F)
J: D + u + v
e: y(v)
N: (x(D) + y(v), y(D) + y(u))
loc1 = Locus(N, C)
h = OrthogonalLine(N, l')
O = Intersect(h, l')
i = Segment(O, N)
P = Rotate((0, 0), (((a + 0.25) * 2) * π), D)
j = Ray(D, P)
p = Circle(D, Distance[C, E])
Q = Intersect(p, l', 1)
n = Line(C, xAxis)
R = Intersect(n, l')
S: (x(N), y(D))
w = Vector(S, N)
q = Vector(D, S)
r: y = 0
s = Segment((x(B) / 2, -0.2), (x(B) / 2, 0.2))
T: (x(C), y(C))