| > | # 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>; |
| (1) |
| > | # Here is the unit tangent vector
T := simplify(TNBFrame(r,t,'output'=['T'])) assuming t::real; |
![]() |
(2) |
| > | # Here is the unit normal vector
N := simplify(TNBFrame(r,t,'output'=['N'])) assuming t::real; |
![]() |
(3) |
| > | # Here is the binormal vector
B := simplify(TNBFrame(r,t,'output'=['B'])) assuming t::real; |
![]() |
(4) |
| > | # Here is the curvature
kappa := simplify(Curvature(r,t)) assuming t::real; |
| (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>; |
![]() |
|
| (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; |
| (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)); |
| (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); |
![]() |
| > |