Session 98: Taylor's Series [br]see clip one introduction to Taylor serie MIT[br][br]########################################################[br]#One Arch Bridge JavaScript code[br]########################################################[br]#you must have these5 slider in graphic window[br]#TileNumber= slider[br]#TileLength[br]#TileThickness[br]#TileStartingY0[br]#TileStartingX0[br][br]code in reset button javascript tab:[br]// this code in Reset Button, in "On clik" javascript tab[br]function DeleteTile(FirstTile,LastTile) {[br]alert("FirstTile:" + String(FirstTile) +" LastTile:" + String(LastTile));[br] for (var i = FirstTile ; i < LastTile ; i++)[br] { [br] ggbApplet.evalCommand("Delete[ Tile_{"+i+"} ]"); [br] }[br]ggbApplet.evalCommand("OldTileNumber=0" );[br]}[br]DeleteTile(0,ggbApplet.getValue('TileNumber'));[br][br]#code in Global Javascript tab of slider TileNumber:[br]var CmSequenceJS=[];[br]var CmSeriesJS=[];[br]# code in update JavaScript Tab of slider TileNumber[br]function CMBuild() {[br]var TileNumberJS=ggbApplet.getValue('TileNumber');[br]var TileLengthJS=ggbApplet.getValue('TileLength');[br]var TileThicknessJS=ggbApplet.getValue('TileThickness');[br]var TileStartingY0JS=ggbApplet.getValue('TileStartingY0');[br]var TileStartingX0JS=ggbApplet.getValue('TileStartingX0');[br]var ParamJS=[TileNumberJS,TileLengthJS,TileThicknessJS,TileStartingY0JS,TileStartingX0JS];[br]// both arrays are now placed in global tab[br]//var CmSequenceJS=[];[br]//var CmSeriesJS=[];[br]var StartIntegrationJS=0.0;[br]var EndIntegrationJS=0.0;[br]var TileCenterOfMassJS=0.0;[br]var TileCenterOfMassPositionJS=0.0;[br]var TileMassJS=0.0;[br]var OldTileNumberJS;[br]var t=0.0;[br]//alert("trough CmBuild");[br]TileNumberJS=ggbApplet.getValue('TileNumber');[br]OldTileNumberJS=ggbApplet.getValue('OldTileNumber');[br]// first Tile x position = left Tile beginning here -->[______][br]if (TileNumberJS >= OldTileNumberJS)[br]{ [br] //alert("TileMassJS:" + String(TileMassJS)); [br] //alert( "TileCenterOfMassPositionJS:" );[br] [br]// the first Tile is positioned at his First center of mass at Zero[br]// so, we need to calculate his position in case of f= Linear Density not constant[br] StartIntegrationJS=0 ;EndIntegrationJS=TileLengthJS; // first Tile[br] Density(StartIntegrationJS) ;[br] ggbApplet.evalCommand("TileMass=Integral[ f,"+StartIntegrationJS+" , "+EndIntegrationJS+" ]");[br] TileMassJS=ggbApplet.getValue('TileMass');[br] ggbApplet.evalCommand("TileCenterOfMass=(1/"+TileMassJS+")*Integral[ x*f,"+StartIntegrationJS+" , "+EndIntegrationJS+" ]");[br] TileCenterOfMassPositionJS=ggbApplet.getValue('TileCenterOfMass');[br] [br] CmSeriesJS[0]=0;[br] for (var i = 1 ; i < TileNumberJS ; i++)[br] {[br] [br] // xcm = weighted average of position = (Sum[m_i*x_i] )/(Sum[m_i])[br] // CmSeriesJS[i]= (CmSeriesJS[i-1]*i*TileMassJS + TileCenterOfMassPositionJS *TileMassJS) /(i*TileMassJS);[br] // so dividing numerator and denominator of the right term above by TileMassJS [br] CmSeriesJS[i]= (CmSeriesJS[i-1]*i + TileCenterOfMassPositionJS ) /i; [br] OldTileNumberJS=i+1 ; [br] //alert("OldTileNumberJS:" + String(OldTileNumberJS));[br] ggbApplet.evalCommand("OldTileNumber="+OldTileNumberJS+" "); [br] CmSeriesJS.length=i+1 ; //size the sequence array to number of elements[br] }[br] // add array element in first position (no more needed)[br] //CmSequenceJS.unshift(0); [br] [br]DisplayTile(CmSeriesJS,TileLengthJS,TileThicknessJS,TileCenterOfMassPositionJS,TileStartingX0JS,TileStartingY0JS);[br]}[br]else[br]{[br] [br] TileNumberJS=ggbApplet.getValue('TileNumber');[br] OldTileNumberJS=ggbApplet.getValue('OldTileNumber');[br] //alert("TileNumber:" + String(TileNumberJS) + " OldTileNumber:" + String(OldTileNumberJS));[br] DeleteTileS(TileNumberJS,OldTileNumberJS);[br] [br] OldTileNumberJS=OldTileNumberJS-1;[br] ggbApplet.evalCommand("OldTileNumber="+OldTileNumberJS+" "); [br] CmSeriesJS.length = TileNumberJS ;[br] [br]}[br] [br]return CmSeriesJS ;[br]}[br] function showArray(Arr){[br] var quote = "";[br] for (var i = 0; i < Arr.length; i++){[br] quote += Arr[i] + " ";[br] }[br] return quote; [br] }[br]// Linear Density Function[br]function Density(StartIntegrationJS) [br]{[br]//Constant[br]//ggbApplet.evalCommand("f(x)=1");[br]//density growing on the right for the tile [br]// f(x)=(x) [br]}[br]function BuildSeries(CmSequenceJS) {[br]var CmSeriesJS=[];[br]CmSeriesJS[0]=0.0;[br]for (var i = 1 ; i < CmSequenceJS.length ; i++)[br] [br] CmSeriesJS[i]= CmSeriesJS[i-1] + CmSequenceJS[i] ;[br] [br]return CmSeriesJS ; [br]}[br]function BuildSequence(CmSeriesJS) {[br]var CmSequenceJS=[];[br]CmSequenceJS[0]=0.0;[br]for (var i = 1 ; i < CmSeriesJS.length ; i++)[br] [br] CmSequenceJS[i]= CmSeriesJS[i]- CmSequenceJS[i-1] ;[br] [br]return CmSequenceJS ; [br]}[br]function DisplayTile(CmSeriesJS,TileLengthJS,TileThicknessJS,TileCenterOfMassPositionJS,TileStartingX0JS,TileStartingY0JS) {[br]var cornerJS=[0,1,2,3,4,5,6,7];[br]//alert("TileStartingY0JS: " + String(TileStartingY0JS));[br]/*[br]alert("cornerJS=[3][0]: " + String(cornerJS=[8]));[br]alert(String(TileLengthJS));[br]alert(String(TileThicknessJS));[br]alert(String(TileStartingX0JS));[br]alert(String(TileStartingY0JS));[br][br][2,3]________ [0,1][br] | |[br] |_____________|[6,7][br][4,5] |Cm[br]*/[br]for (var i = 0 ; i < CmSeriesJS.length ; i++)[br]{ [br]cornerJS=[br][ // [0,1,2,3,4,5,6,7][br]TileStartingX0JS+CmSeriesJS[i]+(TileLengthJS-TileCenterOfMassPositionJS),TileStartingY0JS-i*TileThicknessJS, //[0,1] -->("+cornerJS[0]+","+cornerJS[1]+")[br]TileStartingX0JS+CmSeriesJS[i]-(TileCenterOfMassPositionJS),TileStartingY0JS-i*TileThicknessJS, //[2,3] -->("+cornerJS[2]+","+cornerJS[3]+")[br]TileStartingX0JS+CmSeriesJS[i]-(TileCenterOfMassPositionJS),TileStartingY0JS-(i+1)*TileThicknessJS, //[4,5] -->("+cornerJS[4]+","+cornerJS[5]+")[br]TileStartingX0JS+CmSeriesJS[i]+(TileLengthJS-TileCenterOfMassPositionJS),TileStartingY0JS-(i+1)*TileThicknessJS //[6,7] -->("+cornerJS[6]+","+cornerJS[7]+")[br]];[br]ggbApplet.evalCommand("Tile_{"+i+"}=Polygon[("+cornerJS[0]+","+cornerJS[1]+"),("+cornerJS[2]+","+cornerJS[3]+"),("+cornerJS[4]+","+cornerJS[5]+"),("+cornerJS[6]+","+cornerJS[7]+")]");[br] [br] [br]}[br]return cornerJS ;[br]}[br]// this code is also in Reset Button, in "On clik" javascript tab[br]function DeleteTileS(FirstTile,LastTile) {[br]//alert("FirstTile:" + String(FirstTile) +" LastTile:" + String(LastTile)));[br] for (var i = FirstTile ; i < LastTile ; i++)[br] { [br] ggbApplet.evalCommand("Delete[ Tile_{"+i+"} ]"); [br] }[br]}[br]showArray(CMBuild());[br]# end One arch bridge Javascript code[br]