<Osejs version="3.45">
<Osejs.Information>
<Title><![CDATA[]]></Title>
<Version><![CDATA[]]></Version>
<Author><![CDATA[]]></Author>
<Classification><![CDATA[]]></Classification>
<Keywords><![CDATA[]]></Keywords>
<Abstract><![CDATA[]]></Abstract>
<Language><![CDATA[]]></Language>
<AuxiliaryFiles><![CDATA[]]></AuxiliaryFiles>
</Osejs.Information>
<Osejs.Description>
<Osejs.Description.Page>
<Type>HTML_EDITOR</Type>
<Name>Intro Page</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<![CDATA[
<html>
  <head>
    
  </head>
  <body>
    Designed by Fu-Kwun Hwang http://www.phy.ntnu.edu.tw/ntnujava/
  </body>
</html>

]]>

</Content>
</Osejs.Description.Page>
</Osejs.Description>
<Osejs.Model>
<Osejs.Model.FramesPerSecond>25</Osejs.Model.FramesPerSecond>
<Osejs.Model.Autostart>true</Osejs.Model.Autostart>
<Osejs.Model.AdditionalLibraries>
</Osejs.Model.AdditionalLibraries>
<Osejs.Model.ImportStatements>
</Osejs.Model.ImportStatements>
<Osejs.Model.Variables>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>coordinate</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Variable>
<Name>range</Name>
<Value><![CDATA[200]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[range]]></Comment>
</Variable>
<Variable>
<Name>xmin</Name>
<Value><![CDATA[-range/2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>xmax</Name>
<Value><![CDATA[range/2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>ymin</Name>
<Value><![CDATA[-range/2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>ymax</Name>
<Value><![CDATA[range/2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>t</Name>
<Value><![CDATA[0.0]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>dt</Name>
<Value><![CDATA[0.05]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[time step]]></Comment>
</Variable>
<Variable>
<Name>size</Name>
<Value><![CDATA[range/40]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[particle size]]></Comment>
</Variable>
<Variable>
<Name>size2</Name>
<Value><![CDATA[size/2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>npt</Name>
<Value><![CDATA[300]]></Value>
<Type>int</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>vmax</Name>
<Value><![CDATA[range]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>g</Name>
<Value><![CDATA[0]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name></Name>
<Value><![CDATA[]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>

</Content>
</Osejs.Model.Variables.Page>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>basic</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Variable>
<Name>n</Name>
<Value><![CDATA[60]]></Value>
<Type>int</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>n0</Name>
<Value><![CDATA[40]]></Value>
<Type>int</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>n1</Name>
<Value><![CDATA[n0-1]]></Value>
<Type>int</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>x</Name>
<Value><![CDATA[0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>y</Name>
<Value><![CDATA[0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>vx</Name>
<Value><![CDATA[5]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>vy</Name>
<Value><![CDATA[0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>dx</Name>
<Value><![CDATA[0.0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>dy</Name>
<Value><![CDATA[0.0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>ax</Name>
<Value><![CDATA[0.0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>ay</Name>
<Value><![CDATA[0.0]]></Value>
<Type>double</Type>
<Dimension>[n]</Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>L</Name>
<Value><![CDATA[range*4/n0]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>L2</Name>
<Value><![CDATA[L*2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>k</Name>
<Value><![CDATA[1]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>m</Name>
<Value><![CDATA[1.0]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>km</Name>
<Value><![CDATA[k/m]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>b</Name>
<Value><![CDATA[0.2]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>qcst</Name>
<Value><![CDATA[100]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>q</Name>
<Value><![CDATA[L*L*qcst]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>scale</Name>
<Value><![CDATA[5.0]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name></Name>
<Value><![CDATA[]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>

</Content>
</Osejs.Model.Variables.Page>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>language</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Variable>
<Name>l_play</Name>
<Value><![CDATA["play"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_pause</Name>
<Value><![CDATA["pause"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_reset</Name>
<Value><![CDATA["reset"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_init</Name>
<Value><![CDATA["initialize"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>label</Name>
<Value><![CDATA[l_pause]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_step</Name>
<Value><![CDATA["step"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_tension</Name>
<Value><![CDATA["tension=0.0"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_g</Name>
<Value><![CDATA["gravity=0.0"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_n</Name>
<Value><![CDATA["N=0"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name>l_b</Name>
<Value><![CDATA["damping=0.00"]]></Value>
<Type>String</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name></Name>
<Value><![CDATA[]]></Value>
<Type>double</Type>
<Dimension></Dimension>
<Comment><![CDATA[]]></Comment>
</Variable>

</Content>
</Osejs.Model.Variables.Page>
</Osejs.Model.Variables>
<Osejs.Model.Initialization>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>Init Page</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
x[0]=y[0]=vx[0]=vy[0]=0;
n1=n0-1;
for(int i=1;i<n;i++){
 x[i]=x[i-1]+3*L*(Math.random()-0.5);
 y[i]=y[i-1]+3*L*(Math.random()-0.5);
 vx[i]=vy[i]=0.;
}
// control : L, b,scale
L=range*4/n0;
L2=L*2;
q=L*L*qcst;
//b=0.5*n0/n;
//_play();
//if(_isPaused())playpause();
]]></Code>

</Content>
</Osejs.Model.Initialization.Page>
</Osejs.Model.Initialization>
<Osejs.Model.Evolution>
<Osejs.Model.Evolution.Page>
<Type>ODE_EDITOR</Type>
<Name>ODE</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<IndependentVariable>t</IndependentVariable>
<Increment>dt</Increment>
<Rate state="x[i]">vx[i]</Rate>
<Rate state="y[i]">vy[i]</Rate>
<Rate state="vx[i]">ax[i]=getA(i,x,y,vx[i])</Rate>
<Rate state="vy[i]">ay[i]=getA(i,y,x,vy[i])-g</Rate>
<Method>RungeKutta</Method>
<Tolerance></Tolerance>
<Comment><![CDATA[]]></Comment>
<Events></Events>

</Content>
</Osejs.Model.Evolution.Page>
</Osejs.Model.Evolution>
<Osejs.Model.Constraints>
<Osejs.Model.Constraints.Page>
<Type>CODE_EDITOR</Type>
<Name>Cons Page</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
for(int i=0;i<n1;i++){
 dx[i]=x[i+1]-x[i];
 dy[i]=y[i+1]-y[i];
 if(y[i]<ymin*scale)y[i]=ymin*scale;
}
 if(y[n1]<ymin*scale)y[n1]=ymin*scale;
dx[n1]=x[0]-x[n1];
dy[n1]=y[0]-y[n1];

]]></Code>

</Content>
</Osejs.Model.Constraints.Page>
</Osejs.Model.Constraints>
<Osejs.Model.Library>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>chinese</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
public void zh_tw () {
 l_play="播放";
 l_init="初始化";
 l_reset="重設";
 l_pause="暫停";
 l_step="前進一格";
 label=l_play;
 l_n="彈簧數N=0";
 l_g="重力場g=0.0";
 l_tension="張力T=0.0";
 l_b="阻尼係數B=0.0";
 _initialize();
}
public void locale(String type){
 if(type.equals("zh_tw"))zh_tw();
}
]]></Code>

</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>playpause</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
public void playpause () {
 if(label==l_play){
  label=l_pause;
  _play();
 }else{
  label=l_play;
  _pause();
 }
}
]]></Code>

</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>getA</Name>
<Active>true</Active>
<Visible>true</Visible>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
double r1,r2,a,r3;
public double getA (int id,double x[],double y[],double v) {
 if(id>n0-1)return 0.;
 if(id==0){
  r1=Math.sqrt((x[id]-x[n1])*(x[id]-x[n1])+(y[id]-y[n1])*(y[id]-y[n1]));
  r2=Math.sqrt((x[id]-x[id+1])*(x[id]-x[id+1])+(y[id]-y[id+1])*(y[id]-y[id+1]));
  a=km*(r1-L)*(x[n1]-x[id])/r1+km*(r2-L)*(x[id+1]-x[id])/r2;
 }else if(id==n1){
  r1=Math.sqrt((x[id]-x[id-1])*(x[id]-x[id-1])+(y[id]-y[id-1])*(y[id]-y[id-1]));
  r2=Math.sqrt((x[id]-x[0])*(x[id]-x[0])+(y[id]-y[0])*(y[id]-y[0]));
  a=km*(r1-L)*(x[id-1]-x[id])/r1+km*(r2-L)*(x[0]-x[id])/r2;
 }else{
 r1=Math.sqrt((x[id]-x[id-1])*(x[id]-x[id-1])+(y[id]-y[id-1])*(y[id]-y[id-1]));
 r2=Math.sqrt((x[id]-x[id+1])*(x[id]-x[id+1])+(y[id]-y[id+1])*(y[id]-y[id+1]));
 a= km*(r1-L)*(x[id-1]-x[id])/r1+km*(r2-L)*(x[id+1]-x[id])/r2;
 }
 for(int i=0;i<n0;i++){
   if(i!=id){
     r2=(x[id]-x[i])*(x[id]-x[i])+(y[id]-y[i])*(y[id]-y[i]);
    if(r2>L*L){
     r3=r2*Math.sqrt(r2);
     a+=q*(x[id]-x[i])/r3;
    }
   }
 }
 return a-b*v;
}
]]></Code>

</Content>
</Osejs.Model.Library.Page>
</Osejs.Model.Library>
</Osejs.Model>
<Osejs.View>
<Osejs.View.Creation>
<Osejs.View.Creation.Element>
<Expanded>true</Expanded>
<Type>Elements.Frame</Type>
<Property name="name">Frame</Property>
<Property name="_ejs_mainWindow">true</Property>
<Property name="title"><![CDATA[Frame]]></Property>
<Property name="layout"><![CDATA[border]]></Property>
<Property name="visible"><![CDATA[true]]></Property>
<Property name="location"><![CDATA["58,44"]]></Property>
<Property name="size"><![CDATA["554,578"]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Expanded>true</Expanded>
<Type>Elements.DrawingPanel</Type>
<Property name="name">DrawingPanel</Property>
<Property name="parent">Frame</Property>
<Property name="position">center</Property>
<Property name="autoscaleX"><![CDATA[false]]></Property>
<Property name="autoscaleY"><![CDATA[false]]></Property>
<Property name="minimumX"><![CDATA[xmin*scale]]></Property>
<Property name="maximumX"><![CDATA[xmax*scale]]></Property>
<Property name="minimumY"><![CDATA[ymin*scale]]></Property>
<Property name="maximumY"><![CDATA[ymax*scale]]></Property>
<Property name="square"><![CDATA[true]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.SpringSet</Type>
<Property name="name">SpringSet</Property>
<Property name="parent">DrawingPanel</Property>
<Property name="elementnumber"><![CDATA[n0]]></Property>
<Property name="x"><![CDATA[x]]></Property>
<Property name="y"><![CDATA[y]]></Property>
<Property name="sizex"><![CDATA[dx]]></Property>
<Property name="sizey"><![CDATA[dy]]></Property>
<Property name="enabled"><![CDATA[false]]></Property>
<Property name="radius"><![CDATA[size2]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.ParticleSet</Type>
<Property name="name">ParticleSet</Property>
<Property name="parent">DrawingPanel</Property>
<Property name="elementnumber"><![CDATA[n0]]></Property>
<Property name="x"><![CDATA[x]]></Property>
<Property name="y"><![CDATA[y]]></Property>
<Property name="sizex"><![CDATA[size]]></Property>
<Property name="sizey"><![CDATA[size]]></Property>
<Property name="enabled"><![CDATA[true]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Property name="name">Panel</Property>
<Property name="parent">Frame</Property>
<Property name="position">south</Property>
<Property name="layout"><![CDATA[hbox]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Property name="name">Panel3</Property>
<Property name="parent">Panel</Property>
<Property name="layout"><![CDATA[grid:2,2,0,0]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Slider</Type>
<Property name="name">Slidern</Property>
<Property name="parent">Panel3</Property>
<Property name="variable"><![CDATA[n0]]></Property>
<Property name="minimum"><![CDATA[3]]></Property>
<Property name="maximum"><![CDATA[n]]></Property>
<Property name="format"><![CDATA[%l_n%]]></Property>
<Property name="closest"><![CDATA[false]]></Property>
<Property name="pressaction"><![CDATA[_pause()]]></Property>
<Property name="dragaction"><![CDATA[_initialize()]]></Property>
<Property name="action"><![CDATA[_play()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Slider</Type>
<Property name="name">Sliderg</Property>
<Property name="parent">Panel3</Property>
<Property name="position">center</Property>
<Property name="variable"><![CDATA[g]]></Property>
<Property name="minimum"><![CDATA[0.0]]></Property>
<Property name="maximum"><![CDATA[10.0]]></Property>
<Property name="format"><![CDATA[%l_g%]]></Property>
<Property name="pressaction"><![CDATA[_pause()]]></Property>
<Property name="action"><![CDATA[_play()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Slider</Type>
<Property name="name">Sliderk</Property>
<Property name="parent">Panel3</Property>
<Property name="variable"><![CDATA[k]]></Property>
<Property name="minimum"><![CDATA[1.0]]></Property>
<Property name="maximum"><![CDATA[50.0]]></Property>
<Property name="format"><![CDATA[%l_tension%]]></Property>
<Property name="pressaction"><![CDATA[_pause()]]></Property>
<Property name="dragaction"><![CDATA[km=k/m;]]></Property>
<Property name="action"><![CDATA[_play()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Slider</Type>
<Property name="name">Sliderb</Property>
<Property name="parent">Panel3</Property>
<Property name="variable"><![CDATA[b]]></Property>
<Property name="minimum"><![CDATA[0.0]]></Property>
<Property name="maximum"><![CDATA[1.0]]></Property>
<Property name="format"><![CDATA[%l_b%]]></Property>
<Property name="pressaction"><![CDATA[_pause()]]></Property>
<Property name="action"><![CDATA[_play()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Expanded>false</Expanded>
<Type>Elements.Panel</Type>
<Property name="name">Panel2</Property>
<Property name="parent">Panel</Property>
<Property name="layout"><![CDATA[grid:0,1,0,0]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Button</Type>
<Property name="name">reset</Property>
<Property name="parent">Panel2</Property>
<Property name="text"><![CDATA[%l_reset%]]></Property>
<Property name="action"><![CDATA[_reset()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Button</Type>
<Property name="name">initialize</Property>
<Property name="parent">Panel2</Property>
<Property name="text"><![CDATA[%l_init%]]></Property>
<Property name="action"><![CDATA[_initialize()]]></Property>
</Osejs.View.Creation.Element>
<Osejs.View.Creation.Element>
<Type>Elements.Button</Type>
<Property name="name">label</Property>
<Property name="parent">Panel2</Property>
<Property name="text"><![CDATA[%label%]]></Property>
<Property name="action"><![CDATA[playpause()]]></Property>
</Osejs.View.Creation.Element>
</Osejs.View.Creation>
</Osejs.View>
<Osejs.Experiment>
</Osejs.Experiment>
</Osejs>
