Raedschelder
Nichtperiodische Parkettierung
Spektrum 2/2013, Christoph Pöppe 

Verwendet defStein() aus 
Script "./nichtperiodisch01.txt";
==================================
ScriptBegin
var Grafik = "Script Turtle"

var farbmode=3     // Farbwahl 
var cBack="blue";  // "lightgray"

var a=7;           // Radius
var x=-130; y=200;  // Anfangspunkt
var w=15;          // Drehwinkel
var anz=50;        // Anzahl der Steine 

function init()
{ t.setBrush(cBack);
  t.setPage(-58,105,4,8);
  t.setAntiAliasing();  
  t.defScript("defStein","./nichtperiodisch01.txt");
}

// --------------------------------------------------------
function draw()
{ t.drawKoordSystem();
  //t.drawRaster();
 
 // drawSteine();
  drawMuster();
}


function drawMuster()
{ var s=startSpalte("1", anz); //t.msg(s);
  var max=s.length;

  t.setNoStyle(); t.turnTo(w); t.goTo(x,y);
  var i=1;
  while (i<=max)
  { drawSpalte(s);
    s=nextSpalte(s, 5);  //t.msg(s,"red")
    t.goTo(x,y); t.shift("vektor2",i); 
    if (s.length<0) exit;
    i++;
  }
}



function drawSpalte(s)
{ 
  for(i=0; i<s.length; i++) 
  { t.draw("Stein"+s.charAt(i)); t.shift("vektor1");}
}


function drawSteine()
{
  t.setNoStyle(); t.turnTo(0); 
  t.goTo(-30, 6.4*a); 
  for(n=1; n<7; n++)
   { t.turnTo(0); t.draw("Stein"+n); 
     t.turnTo(-90); t.move(3.2*a);
   }
}

// Mögliche Anschschlussteine zum Stein n

function down(n)
{ // Anschlussteile nach unten
  switch(parseInt(n))
  { case 1: case 2: case 5: return "136";
    case 3: case 4: case 6: return "245";
    default: return "?"}  
}

function rightUp(n)
{ // Anschlussteile nach rechts oben
  switch(parseInt(n))
  { case 2: case 5: case 6: return "146";
    case 1: case 3: case 4: return "235";
    default: return "?" }
}

function rightDown(n)
{ // Anschlussteile nach rechts unten
  switch(parseInt(n))
  { case 2: case 3: case 6: return "124";
    case 1: case 4: case 5: return "356";
    default: return "?" } 
}


function durchschnitt(a,b)
{ var s=""; 
  for(i=0; i<a.length; i++)
  { c=a.charAt(i)
    if (b.indexOf(c)>-1) 
     { if (s.indexOf(c)<0) s=s.concat(c); }
  }
  return s;
}


function nextN(NleftUp, NleftDown, NUp)
{ // Die nächste Steinnummer N aus den umliegenden Steinen
  // berechnen. Input: links oben, links unten, oben

  s=durchschnitt( rightDown(NleftUp), rightUp(NleftDown));
  return durchschnitt( down(NUp), s);
}


function nextSpalte(Spalte, nr)
{ // Steinnummern der nächsten Spalte berechnen
  // Input: letzte Spalte, Start nr der nächsten Spalte

  var s=""; s=s.concat(nr);
  var imax=Spalte.length;  var i=1; var i1=2;
  while(i1<imax)
  { nr=nextN(Spalte.charAt(i),Spalte.charAt(i1), nr)
    s=s.concat(nr);
    i++; i1++;
  }
  return s;
}

function startSpalte(nr, n)
{ // Steinnummern der Startspalte
  s="";
  for(i=0; i<n; i++) { s=s.concat(nr);}
  return s;
}

ScriptEnd
----------------------------------------------
