xxxxxxxxxx
149
let wic = 5;
let hec = 5;
let wi;
let he;
let ne = 0;
let nw = 1;
let sw = 2;
let se = 3;
function setup() {
createCanvas(400, 400);
noLoop();
background(200);
stroke(0);
strokeWeight(1);
strokeCap(SQUARE);
noFill();
wi = width/wic;
he = height/hec;
drawboard();
strokeWeight(10);
drawlines();
drawcrosses();
drawarcs();
drawwissels();
drawdwissels();
drawdwisselsr();
saveCanvas("myCanvas","jpg");
}
let lines = [
{r:1,c:4,d:0},
{r:0,c:3,d:1},
//{r:1,c:2,d:0},
{r:2,c:1,d:1},
{r:2,c:3,d:1},
{r:3,c:0,d:0},
{r:3,c:2,d:0},
{r:3,c:4,d:0},
{r:4,c:1,d:1},
{r:4,c:3,d:1},
{r:1,c:1,d:1},
];
let crosses = [
{r:2,c:2}
]
let arcs = [
{r:0,c:2,d:se},
{r:0,c:4,d:sw},
{r:1,c:0,d:se},
{r:4,c:0,d:ne},
{r:4,c:4,d:nw}
]
let wissels = [ // rij,col,wissel ri,vanaf z,w,n,o
{r:2,c:0,d:1,o:0},
{r:1,c:2,d:0,o:0}
]
let dwissels = [
{r:4,c:2,o:2}
]
let dwisselsr = [
{r:2,c:4,o:1}
]
function drawboard() {
for (let x=0;x<wic+1;x++) {
line( x*wi,0,x*wi,height );
}
for (let y=0;y<hec+1;y++) {
line( 0,y*he,width,y*he );
}
}
function drawline(r,c,hv) {
if (hv==0) {
line( (c+0.5)*wi,r*he,(c+0.5)*wi,(r+1)*he );
} else {
line( c*wi,(r+0.5)*he,(c+1)*wi,(r+0.5)*he );
}
}
function drawlines() {
lines.forEach(l=>drawline(l.r,l.c,l.d));
}
function drawcrosses() {
crosses.forEach(c=>drawcross(c.r,c.c));
}
function drawcross(r,c) {
drawline(r,c,0);
drawline(r,c,1);
}
function drawarcs() {
arcs.forEach(a=>drawarc(a.r,a.c,a.d));
}
function drawarc(r,c,pos) {
if (pos==se)
arc( (c+1)*wi,(r+1)*he,wi,he,PI,3*PI/2,OPEN );
if (pos==nw)
arc(c*wi, r*he, wi, he, 0, PI/2, OPEN );
if (pos==sw)
arc( c*wi, (r+1)*he, wi, he, 3*PI/2, 2*PI, OPEN );
if (pos==ne)
arc((c+1)*wi, r*he, wi, he, PI/2, PI, OPEN );
}
function drawwissels() {
wissels.forEach(w=>drawwissel(w.r,w.c,w.d,w.o));
}
function drawdwissels() {
dwissels.forEach(dw=>drawdwissel(dw.r,dw.c,dw.o));
}
function drawdwisselsr() {
dwisselsr.forEach(dwr=>drawdwisselr(dwr.r,dwr.c,dwr.o));
}
function drawdwisselr(r,c,o) {
drawdwissel(r,c,o);
if (o==0 || o==2) {
drawline(r,c,1);
} else {
drawline(r,c,0);
}
}
function drawwissel(r,c,d,o) {
if (o==0 || o==2) {
drawline(r,c,0);
} else {
drawline(r,c,1);
}
let w = [ [sw,se],[nw,sw],[ne,nw],[se,ne] ][o][d];
drawarc(r,c,w);
}
function drawdwissel(r,c,o) {
let wl = [sw,nw,ne,se][o];
let wr = [se,sw,nw,ne][o];
drawarc(r,c,wl);
drawarc(r,c,wr);
}