//kohonen SOM //taken from // // // //also based on // int state = 0; SOM net; Buttons [] button; PFont font; void setup(){ size(600,600); double [] x = { 0.0 }; double [] y = { 0.0 }; net = new SOM(10,x,y); font = loadFont("Kartika-48.vlw"); textFont(font,24); button = new Buttons[4]; button[0] = new Buttons(500, 100, 100, 20, #EEEEEE, "train network", null); button[1] = new Buttons(500, 120, 100, 20, #EEEEEE, "clear vectors", null); button[2] = new Buttons(500, 140, 100, 20, #EEEEEE, "reset network", null); button[3] = new Buttons(500, 160, 100, 20, #EEEEEE, "wierd mode", null); } void draw(){ background(0); switch(state){ case 1: if(!net.stable) net.run(); break; } net.draw(); for(int i = 0; i < button.length; i++) button[i].draw(); fill(255); text("Kohonen Self Organising Map",10,20); text("Click on applet to create target vectors (use more than 2) then train network to map net",10,40); } void mousePressed(){ int choice = -1; for(int i = 0; i < button.length; i++) if(button[i].over()) choice = i; switch(choice){ case 0: if(state == 0){ state = 1; button[0].label = "stop training"; } else{ state = 0; button[0].label = "train network"; } break; case 1: double [] x = { 0.0 }; double [] y = { 0.0 }; net.xv = x; net.yv = y; net.vectorChoice = 0; break; case 2: double [] xt = { 0.0 }; double [] yt = { 0.0 }; net = new SOM(9,xt,yt); break; case 3: net.comeToDaddy = !net.comeToDaddy; break; default: if (net.xv[0] == 0.0){ net.xv[0] = (double)(1.0 / width) * mouseX; net.yv[0] = (double)(1.0 / height) * mouseY; } else{ net.addVector((double)(1.0 / width) * mouseX,(double)(1.0 / height) * mouseY); } break; } }