var('t');
def norma(v):
return sqrt(sum(x^2 for x in v))
paso_angulo=5
@interact
def _( gamma1=input_box(default=sin(t)), gamma2=input_box(default=1.3*cos(t)),
draw_normal_lines=True,
rango_angulos=range_slider(0,360,paso_angulo,(0,90),label='Draw lines for these angles'),
draw_osculating_circle=True,
t0=input_box(default=pi/3,label='parameter value for the osculating circle'),
auto_update=False ):
gamma=(gamma1,gamma2)
gammap=(gamma[0].derivative(),gamma[1].derivative())
np=norma(gammap)
gammapp=(gammap[0].derivative(),gammap[1].derivative())
npp=norma(gammapp)
normal=(gammap[1]/np, -gammap[0]/np)
curvatura=(gammap[1]*gammapp[0]-gammap[0]*gammapp[1])/norma(gammap)^3
radio=1/curvatura
centros=(gamma[0]+radio*normal[0],gamma[1]+radio*normal[1])
curva=parametric_plot(gamma,(t,0,2*pi))
evoluta=parametric_plot(centros,(t,0,2*pi), color='red')
grafica=curva+evoluta
if draw_normal_lines:
f=2*pi/360
lineas=sum(line2d( [ (gamma[0](t=i*f), gamma[1](t=i*f)),
(centros[0](t=i*f), centros[1](t=i*f)) ],
thickness=1,rgbcolor=(1,0.8,0.8))
for i in range(rango_angulos[0], rango_angulos[1]+paso_angulo, paso_angulo))
grafica+=lineas
if draw_osculating_circle and 0<t0<2*pi:
punto=point((gamma[0](t=t0), gamma[1](t=t0)), rgbcolor=hue(0),pointsize=30)
circulo=circle( (centros[0](t=t0), centros[1](t=t0)), radio(t=t0) )
grafica+=punto+circulo
show(grafica,aspect_ratio=1,xmin=-2,xmax=2,ymin=-2,ymax=2)