Sage Fever

Well, I should be studying Calculus, but instead I wrote another sage application for visualizing another project problem. This one is the classic cow tied to a silo problem; if the rope just reaches the far side of the silo, how much area can the cow cover?

My python is still pretty rusty, but I think I did a little better on this one than the last:

###################################################################
#
# an application for plotting "the cow tied to a silo" problem.
# author: bnr
# date: 2012-10-16
#
###################################################################
from sage.plot.line import Line
from sage.plot.arc import Arc
r,t, a1, labl1,label2 = var('r,t, a1,labl1,labl2')
# the radius of the silo
r = 1
@interact
def _( r = slider( [1..25],1, label = "Silo Radius") ): 

 #the area labels
 labl1 = text(('$ \\frac{A_1}{2} $'), (2.5*r,1.5*r),fontsize=20,color='black') 
 labl2 = text(('$A_2$'),(.5*r,1.5*r),fontsize=20,color='brown')

 # x and y on the silo perimeter 
 def x1(t): return r*cos((t))
 def y1(t): return r*sin((t))
#the area of the half-circle; A_1
 f = sqrt( (pi*r)^2 - (x -r)^2 ) 
 L1 = plot(f, r, r*(pi+1), fill=True) + labl1
# the curve of the silo wall
 L2 = parametric_plot( (x1(t), y1(t) ), (t, 0, float(pi)), color='red')

 # wrapping the rope around the silo
 def silo_rad(a):

 # finding the curve as the rope is stretched taught
 def new_x(a) : 
 new_x = x1(a) - abs( r*(pi-a)*sin(a) ) 
 return new_x

 def new_y(a) : 
 new_y = y1(a) + ( r*(pi-a)*cos(a) )
 return new_y

 # the tangent line of the taught rope
 s_tan = line( ( ( new_x(a), new_y(a) ) , ( ( x1(a),y1(a) ) ) ) )

 # the arc walked by the cow with the rope taught 
 cow = parametric_plot( (new_x(t), new_y(t) ), (t, 0, float(pi)), color='brown')
 return s_tan + cow + labl2

 # calculating the area in the half-circle
 def A1(a) : 
 return round( (pi^3)*(a^2)/2, 4)
# calculating twice the area of the integral part; A_2
 def A2(a) : 
 return round( (pi^3)*(a^2)/3, 4)
# point of tangent to silo
 def f(a):
 p1 = point( ( x1(a), y1(a) ) )
 return L1 + L2 + p1 + silo_rad(a)
# printing the calculated areas 
 print( html('$A_1= \\frac{\pi^3 r^2}{2} {\\approx} $' + str(A1(r) ) + '$\hspace{12 mm}2 \\times A_2 = \\frac{\pi^3 r^2}{3} {\\approx} $' + str(A2(r)) + '$\hspace{12 mm}Total\ Area = \\frac{5\pi^3 r^2}{6} {\\approx} $' + str(A2(r) + A1(r)) ) )

 # animating the tangent line/integral part; A_2
 a1 = animate([f(i) for i in srange(0,float(pi),.1)] , xmin = float(-2*r), xmax = float((1.1+pi)*r), ymin = float(-.2), ymax = float(1.1*pi*r))
a1.gif(savefile='my_animation.gif', show_path=False )
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s