diff --git a/server.sh b/server.sh new file mode 100644 index 0000000..2ad0d8e --- /dev/null +++ b/server.sh @@ -0,0 +1 @@ +php -S localhost:8000 diff --git a/sketch-test2D.js b/sketch-test2D.js new file mode 100644 index 0000000..fc34640 --- /dev/null +++ b/sketch-test2D.js @@ -0,0 +1,223 @@ +/* + * rootApostolos + * P5js example + * IMU 2D + * + * + * + */ +var data = {}; // Global object to hold results from the loadJSON call +var data1 // Global object to hold results from the loadJSON call +var bubbles = []; // Global array to hold all bubble objects + + // accelarator data from json file +let aX = 0; // "accelarator","X": +let aY = 0; // "accelarator","Y": +let aZ = 0; // "accelarator","Z": + +var rot = 0; // +var anglesX =0; // rotation X +var anglesY =0; // rotation Y +var anglesZ =0; // rotation Z +var x1 = 500 // +var y1 = 500 // +var x2 = 800 // +var y2 = 800 // + +var G = 9.82 // g in greece https://en.wikipedia.org/wiki/Gravitational_acceleration + +var dt = 0.1 // miliseconds -> second read in sketch Arduino + +var AX, AY, BX, BY, CX, CY; // accelarator data after calculation + +AX = 120; // start position X +AY = 900; // start position Y + +var i = 0 + +// Put any asynchronous data loading in preload to complete before "setup" is run +function preload() { + data = loadJSON('./data/b.json'); + let file = "./data/test2.txt" + data1 = loadJSON(file); + +} + +function loadData() { + var bubbleData = data['bubbles']; + for (var i = 0; i < bubbleData.length; i++) { + // Get each object in the array + var bubble = bubbleData[i]; + // Get a position object + var position = bubble['position']; + // Get x,y from position + var x = position['x']; + var y = position['y']; + + // Get diameter and label + var diameter = bubble['diameter']; + var label = bubble['label']; + + // Put object in array + bubbles.push(new Bubble(x, y, diameter, label)); + } +} + +// Create a new Bubble each time the mouse is clicked. +function mousePressed() { + keyPressed() +} +function keyPressed() { + // Add diameter and label to bubble + var diameter = random(10, 20); + var label = 'New Label'; + console.log(" i " + i) + + // load data from json + // {"sensor":"accelarator","X":0.342388,"Y":0.153237,"Z":10.02743}, + aX = data1[i].X * G; + aY = data1[i].Y * G; + aZ = data1[i].Z * G; + sensor = data1[i].sensor; + console.log(" X " + aX); + + AX=AX+aX*dt; // new position X + AY=AY+aY*dt; // new position Y + + // {"sensor":"gyroscope","X":-0.000647,"Y":-0.000583,"Z":0.000652}, + var ii=i+1 + gX = data1[ii].X; + gX = gX * dt; + + gY = data1[ii].Y; + //gY = gY/8.999; + gY = gY * dt; + + gZ = data1[ii].Z; + gZ = gZ * dt; + sensor = data1[ii].sensor; + console.log(" ii " + ii) + console.log(sensor); + console.log(gX); + console.log(gY); + console.log(gZ); + + // {"sensor":"magnometer","X":-0.000647,"Y":-0.000583,"Z":0.000652} + var iii=i+2 + mX = data1[iii].X; + mY = data1[iii].Y; + mZ = data1[iii].Z; + console.log(" ii1 " + iii) + sensor = data1[iii].sensor; + console.log(sensor); + console.log(mX); + console.log(mY); + console.log(mZ); + + anglesZ = Math.acos((-gY)/(Math.pow(1-Math.pow(gZ,2),0.5))); + console.log("anglesZ:"+anglesZ); + + //peristrofi ston x axona mikos + anglesX=acos(gZ); + var anglesXX = anglesX * 180 / Math.PI; + console.log("anglesXX:"+anglesXX); + console.log("anglesX:"+anglesX); + + //peristrofi ston y axona + anglesY=acos(gX/(Math.pow(1-pow(gZ,2),0.5))); + console.log("anglesY:"+anglesY); + + BX=BX+aX*3; + BY=BY+aY*3; + + CX=CX+aX*3; + CY=CY+aY*3; + + label = " AX " + AX + " AY " + AY + " anglesX " + anglesX + " anglesY " + anglesY; + bubbles.push(new Bubble(AX, AY, diameter, label)); + console.log( " X " + AX + " Y " + AY + " D " + diameter + " L " + label); + + + // Prune Bubble Count if there are too many + if (bubbles.length > 5) { + bubbles.shift(); // remove first item from array + } + i=i+3 +} + +function setup() { + //createCanvas(y, x); + createCanvas(1850, 1750); + //createCanvas(windowWidth, windowHeight); + loadData(); +} + +function draw() { + //background(255); + background(100, 100, 100); + + // Display all bubbles + for (var i = 0; i < bubbles.length; i++) { + bubbles[i].display(); + bubbles[i].rollover(mouseX, mouseY); + } + + // Label directions at bottom + textAlign(LEFT); + fill(0); + text('Click to add bubbles.', 10, height - 10); +} + +// Bubble class +function Bubble(x, y, diameter, name) { + this.x = x; + this.y = y; + this.diameter = diameter; + this.radius = diameter / 2; + this.name = name; + + this.over = false; + + // Check if mouse is over the bubble + this.rollover = function(px, py) { + var d = dist(px, py, this.x, this.y); + if (d < this.radius) { + this.over = true; + } else { + this.over = false; + } + }; + + // Display the Bubble + this.display = function() { + stroke(0); + strokeWeight(0.8); + var v = createVector(0, 1); + v.setMag(300); + var xx1 = 500; + var yy1 = 800; + var xx2 = xx1 + v.x; + var yy2 = yy1 + v.y; + line(xx1, yy1, xx2, yy2); + xx1 = xx2; + yy1 = yy2; + + //https://el.wikipedia.org/wiki/%CE%91%CE%BA%CF%84%CE%AF%CE%BD%CE%B9%CE%BF_(%CE%BC%CE%BF%CE%BD%CE%AC%CE%B4%CE%B1_%CE%BC%CE%AD%CF%84%CF%81%CE%B7%CF%83%CE%B7%CF%82) + // https://stackoverflow.com/questions/12959237/get-point-coordinates-based-on-direction-and-distance-vector + // ihttps://en.wikipedia.org/wiki/Euler_angles#Geometrical_definition + //angleMode(DEGREES); + angleMode(RADIANS); + v.rotate( Math.PI - anglesX); + //v.rotate(XXX); + stroke(255, 0, 0); + line(xx1, yy1, xx1 + v.x, yy1 + v.y); + + ellipse(this.x, this.y, this.diameter, this.diameter); + if (this.over) { + fill(0); + textAlign(CENTER); + text(this.name, this.x, this.y + this.radius + 20); + } + }; +} + diff --git a/sketch-test3D.js b/sketch-test3D.js new file mode 100644 index 0000000..a250443 --- /dev/null +++ b/sketch-test3D.js @@ -0,0 +1,184 @@ +/* + * + * rootApostolos + * P5js example + * IMU 3D + * + * + * + * + */ +var data = {}; // Global object to hold results from the loadJSON call +var data1 // Global object to hold results from the loadJSON call +var bubbles = []; // Global array to hold all bubble objects +let aX = 0; +let aY = 0; +let aZ = 0; +var rot = 0; +var anglesX =0; +var anglesY =0; +var anglesZ =0; +var x1 = 500 +var y1 = 500 +var x2 = 800 +var y2 = 800 +// g greece +var G = 9.82 +// miliseconds se second read in sketch +var dt = 0.1 +// motion scene to show +var motion = 1 + +var train; + +var AX, AY, BX, BY, CX, CY; +var i = 0 +AX = 120; +AY = 900; + + +// Put any asynchronous data loading in preload to complete before "setup" is run +function preload() { + data = loadJSON('./data/b.json'); + let file = "./data/test2.txt" + data1 = loadJSON(file); + train = loadModel('data/train-corrected.obj'); + +} + +// Convert saved Bubble data into Bubble Objects +function loadData() { + var bubbleData = data['bubbles']; + for (var vv = 0; vv < bubbleData.length; vv++) { + // Get each object in the array + var bubble = bubbleData[vv]; + // Get a position object + var position = bubble['position']; + // Get x,y from position + var x = position['x']; + var y = position['y']; + + // Get diameter and label + var diameter = bubble['diameter']; + var label = bubble['label']; + + // Put object in array + bubbles.push(new Bubble(x, y, diameter, label)); + } +} + +// Create a new Bubble each time the mouse is clicked. +function mousePressed() { + keyPressed() +} +function keyPressed() { + // Add diameter and label to bubble + var diameter = random(10, 20); + var label = 'New Label'; + + console.log(" ---> object " + i/3) + aX = data1[i].X * G; + aY = data1[i].Y * G; + aZ = data1[i].Z * G; + sensor = data1[i].sensor; + console.log(" source aX " + aX); + console.log(" source aY " + aY); + console.log(" source aZ " + aZ); + + AX=AX+aX*dt; + AY=AY+aY*dt; + console.log(" metavoli aX " + AX); + console.log(" metavoli aY " + AY); + var ii=i+1 + gX = data1[ii].X; + gX = gX * dt; + + gY = data1[ii].Y; + //gY = gY/8.999; + gY = gY * dt; + + gZ = data1[ii].Z; + gZ = gZ * dt; + console.log(" gX " + gX); + console.log(" gY " + gY); + console.log(" gZ " + gZ); + + var iii=i+2 + mX = data1[iii].X; + mY = data1[iii].Y; + mZ = data1[iii].Z; + sensor = data1[iii].sensor; + console.log(sensor); + console.log(" mX " + mX); + console.log(" mY " + mY); + console.log(" mZ " + mZ); + + anglesZ = Math.acos((-gY)/(Math.pow(1-Math.pow(gZ,2),0.5))); + console.log("anglesZ:"+anglesZ); + + //peristrofi ston x axona mikos + anglesX=acos(gZ); + var anglesXX = anglesX * 180 / Math.PI; + console.log("anglesXX:"+anglesXX); + console.log("anglesX:"+anglesX); + + //peristrofi ston y axona + anglesY=acos(gX/(Math.pow(1-pow(gZ,2),0.5))); + console.log("anglesY:"+anglesY); + + BX=BX+aX*3; + BY=BY+aY*3; + + CX=CX+aX*3; + CY=CY+aY*3; + + bubbles.push(new Bubble(AX, AY, diameter, label)); + console.log( " X " + AX + " Y " + AY + " D " + diameter + " L " + label); + + // Prune Bubble Count if there are too many + if (bubbles.length > motion) { + bubbles.shift(); // remove first item from array + } + i=i+3 +} + +function setup() { + createCanvas(1850, 1750, WEBGL); +} + +function draw() { + //background(250); + background(150); + //background(100, 100, 100); + + // Display all bubbles + for (var v = 0; v < bubbles.length; v++) { + bubbles[v].display(); + } + +} + +// Bubble class +function Bubble(x, y, diameter, name) { + this.x = x; + this.y = y; + this.diameter = diameter; + this.radius = diameter / 2; + this.name = name; + + this.display = function() { + //angleMode(DEGREES); + angleMode(RADIANS); + //translate(this.x,this.y); + var camX = map(mouseX, 0 , width, -500 , 0); + camera(0,0,(height/2)/tan(PI/6),camX,0,0,1,0,1); + rotateZ(anglesZ ); + rotateX(anglesX ); + rotateY(anglesY ); + model(train); + normalMaterial(); + //noStroke(); + ambientLight(255); + }; +} +