18. Root locus.

  npoles=3;
  poles[0]= [ 0,0];
  poles[1]= [ 0,0];
  poles[2]= [-1,0];
  nzeros=1;
  zeros[0]= [-1/3,0];

  var ds=.02;
  var dw=.02;
  function Blob(x,c){
    Colour(c);
    BoxFill(x[0]-ds/2,x[1]+dw/2,x[0]+ds/2,x[1]-dw/2);
  }

  function Blip(x,c){
    Colour(c);
    BoxFill(x[0]-ds/4,x[1]+dw/4,x[0]+ds/4,x[1]-dw/4);
  }
  function Showroots(){
    for(i=0;i<npoles;i++){
      Blob(poles[i],"black");
    }
    for(i=0;i<nzeros;i++){
      Blob(zeros[i],"black");
      Blip(zeros[i],"white");
    }
  }

  ScaleWindow(-1.6,-1,1.6,1);

  for(s[1]=-.98;s[1]<1;s[1]+=dw){
    for(s[0]=-1.58;s[0]<1.6;s[0]+=ds){
      getgain(s);
      if(gain[1]>0){
        Blob(s,"red");
      }
      if(gain[1]<0){
        Blob(s,"yellow");
      }
      if(gain[0]>0){
        Blip(s,"white");
      }
    }
  }

  DrawAxes(-1.5,-1,1.5,1);
  Showroots();
  Colour("black");
  Label('Root locus - gain map',.5,.5);