osculating_circles.mws

> # We will graph the osculating circles of the sine wave
#
# This worksheet can easily be modified to graph osculating
# circles of other curves...just modify "curve_eq" and "r"
# then adjust "t_begin" and "t_end" to better match your
# curve

# First we must initialize...
restart;
with(VectorCalculus):
with(plots):
 

> # Consider the sine wave
curve_eq := y=sin(x);

# We also need a parametrized version of the sine wave
# Please note: Maple uses e_x and e_y to denote the i and j unit vectors
r := <t,sin(t),0>;
 

 

y = sin(x)
Vector[column](%id = 168397380) (1)
 

> # Here is the unit tangent vector
T := simplify(TNBFrame(r,t,'output'=['T'])) assuming t::real;
 

Vector[column](%id = 170885660) (2)
 

> # Here is the unit normal vector
N := simplify(TNBFrame(r,t,'output'=['N'])) assuming t::real;
 

Vector[column](%id = 172578076) (3)
 

> # Here is the binormal vector
B := simplify(TNBFrame(r,t,'output'=['B'])) assuming t::real;
 

Vector[column](%id = 171859176) (4)
 

> # Here is the curvature
kappa := simplify(Curvature(r,t)) assuming t::real;
 

`/`(`*`(abs(sin(t))), `*`(`^`(`+`(1, `*`(`^`(cos(t), 2))), `/`(3, 2)))) (5)
 

> # We can now find the equation of the osculating circle at r(t_0)

# The osculating circle has radius 1/kappa
cir_radius := 1/eval(kappa,t=t_0);

# We find its center by starting at r(t_0) on our curve and then
# traveling (in the unit normal N(t_0) direction) 1/kappa
# (the radius of the circle) units.
cir_center := eval(r,t=t_0) + cir_radius*eval(N,t=t_0);

# Finally, we dot circle_center with e_x and e_y in order to
# rip-off the x and y coordinates of the center.
cc_x := cir_center . <1,0,0>;
cc_y := cir_center . <0,1,0>;
 

 

 

 

`/`(`*`(`^`(`+`(1, `*`(`^`(cos(t_0), 2))), `/`(3, 2))), `*`(abs(sin(t_0))))
Vector[column](%id = 170326500)
`+`(t_0, `/`(`*`(`+`(1, `*`(`^`(cos(t_0), 2))), `*`(cos(t_0), `*`(sin(t_0)))), `*`(`^`(abs(sin(t_0)), 2))))
`+`(sin(t_0), `-`(`/`(`*`(`+`(1, `*`(`^`(cos(t_0), 2))), `*`(sin(t_0))), `*`(`^`(abs(sin(t_0)), 2))))) (6)
 

> # Here is the equation of the osculating circle at r(t_0)
osc_circle := (x-cc_x)^2 + (y-cc_y)^2 = cir_radius^2;
 

`+`(`*`(`^`(`+`(x, `-`(t_0), `-`(`/`(`*`(`+`(1, `*`(`^`(cos(t_0), 2))), `*`(cos(t_0), `*`(sin(t_0)))), `*`(`^`(abs(sin(t_0)), 2))))), 2)), `*`(`^`(`+`(y, `-`(sin(t_0)), `/`(`*`(`+`(1, `*`(`^`(cos(t_0)...
`+`(`*`(`^`(`+`(x, `-`(t_0), `-`(`/`(`*`(`+`(1, `*`(`^`(cos(t_0), 2))), `*`(cos(t_0), `*`(sin(t_0)))), `*`(`^`(abs(sin(t_0)), 2))))), 2)), `*`(`^`(`+`(y, `-`(sin(t_0)), `/`(`*`(`+`(1, `*`(`^`(cos(t_0)...
(7)
 

> # Here is a line from the curve (at r(t_0)) to the center of the circle.
pt_x0 := eval(r,t=t_0) . <1,0,0>;
pt_y0 := eval(r,t=t_0) . <0,1,0>;

norm_line := simplify((pt_x0 - cc_x)*(y - pt_y0) = (pt_y0 - cc_y)*(x - pt_x0));
 

 

 

t_0
sin(t_0)
`+`(`-`(`/`(`*`(sin(t_0), `*`(cos(t_0), `*`(`+`(y, `*`(y, `*`(`^`(cos(t_0), 2))), `-`(`*`(sin(t_0), `*`(`^`(cos(t_0), 2)))), `-`(sin(t_0)))))), `*`(`^`(abs(sin(t_0)), 2))))) = `/`(`*`(`+`(1, `*`(`^`(c...
`+`(`-`(`/`(`*`(sin(t_0), `*`(cos(t_0), `*`(`+`(y, `*`(y, `*`(`^`(cos(t_0), 2))), `-`(`*`(sin(t_0), `*`(`^`(cos(t_0), 2)))), `-`(sin(t_0)))))), `*`(`^`(abs(sin(t_0)), 2))))) = `/`(`*`(`+`(1, `*`(`^`(c...
(8)
 

> # Now let's plot some of these circles, normal lines, and the curve itself

# Choose a range of values for t_0
t_begin := 0.5;
t_end := 2.5;

# make sure that all of the circles fit in the plot window
x_max := max(seq(1.1*cir_radius+cc_x,t_0=t_begin..t_end,(t_end-t_begin)/10)):
x_min := min(seq(-1.1*cir_radius+cc_x,t_0=t_begin..t_end,(t_end-t_begin)/10)):
y_max := max(seq(1.1*cir_radius+cc_y,t_0=t_begin..t_end,(t_end-t_begin)/10)):
y_min := min(seq(-1.1*cir_radius+cc_y,t_0=t_begin..t_end,(t_end-t_begin)/10)):

# to view this animation, first click on the plot, then some buttons will appear
# where the "[Text][Math][C Maple Input]..." toolbar used to be (above)
#
# for smoother animations, set frames to be something like 100
# ***This calculation may take a minute or two***
animate(implicitplot,
       [[osc_circle, curve_eq, norm_line], x=x_min..x_max, y=y_min..y_max],
       t_0=t_begin..t_end,
       frames=30, scaling=constrained, numpoints=300);
 

 

 

.5
2.5
Plot_2d
 

>