(* Context: KnoxPackages`Animations` *) (* Directory Path: Packages/KnoxPackages/Animations.m *) (* Mathematica Version: 2.0 *) (* Author: Dennis M. Schneider with assistance from Sylvia Cook, Robby Villegas *) (* Copyright 1991-92 by Dennis M. Schneider *) (* Work on this package partially supported by grants from: Pew Charitable Trusts and National Science Foundation NSF-ILI Grant # USE-9050757 NSF Grant # USE-9153249 and Knox College *) BeginPackage["KnoxPackages`Animations`",{"KnoxPackages`Calculus`","Utilities`FilterOptions`"}]; AnimateCircle::usage = "AnimateCircle[{h,k},r] produces an animation of an circle centered at {h,k} with radius r."; AnimateEllipse::usage = "AnimateEllipse[{h,k},{xradius,yradius}] produces an animation of an ellipse centered at {h,k} with semi-axes of lengths xradius and yradius."; Options[AnimateEllipse] = {Frames->16}; Options[AnimateCircle] = {Frames->16}; Begin["`Private`"]; AnimateCircle[center_List,radius_,opts___] := Module[{frames,lines,plotrange,aspectratio,temp}, frames = (Frames /. {opts} /. Options[AnimateCircle]) - 1; lines = Graphics[{ Line[{center + radius{-1,0},center + radius{1,0}}], Line[{center + radius{0,-1},center + radius{0,1}}]}, AspectRatio->Automatic,Evaluate[FilterOptions[Graphics,opts]]]; {plotrange,aspectratio} = {PlotRange,AspectRatio} /. FullOptions[lines]; Show[ lines, PlotVector[Evaluate[{center,{radius,0} + center}], DisplayFunction->Identity, Evaluate[FilterOptions[PlotVector,opts]], PlotRange->plotrange,AspectRatio->aspectratio, PlotStyle->RGBColor[1,0,0]], Graphics[{PointSize[.017],Point[center]}], FilterOptions[Graphics,opts],DisplayFunction->$DisplayFunction]; Do[ temp = {Cos[k],Sin[k]}//N; Show[ lines, Graphics[Circle[center,radius,{0,k}]], Graphics[GrayLevel[.5],Circle[center,radius/2,{0,k}]], PlotVector[Evaluate[{center,center + radius temp}], DisplayFunction->Identity,PlotRange->plotrange,AspectRatio->aspectratio, PlotStyle->RGBColor[1,0,0]], Graphics[{PointSize[.017],Point[center]}], Graphics[{GrayLevel[1/3],Text[k,center + radius {1/4,1/8}]}], FilterOptions[Graphics,opts],PlotRange->plotrange,AspectRatio->aspectratio, DisplayFunction->$DisplayFunction], {k,2Pi/frames,2Pi,2Pi/frames}]]; AnimateEllipse[center_List,axes:{xradius_,yradius_},opts___] := Module[{frames,smallr,bigr,circle,lines,plotrange,aspectratio,temp}, frames = (Frames /. {opts} /. Options[AnimateEllipse]) - 1; {smallr,bigr} = {Min[axes],Max[axes]}; circle = Graphics[{GrayLevel[.5],Circle[center,bigr]},AspectRatio->Automatic, Evaluate[FilterOptions[Graphics,opts]]]; lines = Graphics[{ Line[{center + bigr{-1,0},center + bigr{1,0}}], Line[{center + bigr{0,-1},center + bigr{0,1}}]}]; {plotrange,aspectratio} = {PlotRange,AspectRatio} /. FullOptions[circle]; Show[ circle,lines, PlotVector[Evaluate[{center,{xradius,0} + center}], DisplayFunction->Identity, Evaluate[FilterOptions[PlotVector,opts]], PlotRange->plotrange,AspectRatio->aspectratio, PlotStyle->RGBColor[1,0,0]], Graphics[{PointSize[.017],Point[center]}], FilterOptions[Graphics,opts],DisplayFunction->$DisplayFunction]; Do[ temp = {Cos[k],Sin[k]}//N; Show[ circle,lines, Graphics[Circle[center,{xradius,yradius},{0,k}]], Graphics[{GrayLevel[.5],Circle[center,smallr,{0,k}], Line[{center + smallr temp,center + axes temp}]}], (*Graphics[{PointSize[.017],Point[center + axes temp]}],*) PlotVector[Evaluate[{{center,center + smallr temp},{center,center + axes temp}}], DisplayFunction->Identity,PlotRange->plotrange,AspectRatio->aspectratio, PlotStyle->{GrayLevel[1/3],RGBColor[1,0,0]}], Graphics[{PointSize[.017],Point[center]}], Graphics[{GrayLevel[1/3],Text[k,center + smallr {1/2,1/4}]}], FilterOptions[Graphics,opts],PlotRange->plotrange,AspectRatio->aspectratio, DisplayFunction->$DisplayFunction], {k,2Pi/frames,2Pi,2Pi/frames}]] End[]; Protect[AnimateCircle,AnimateEllipse]; EndPackage[];