فهرست منبع

Implement euclidean distance of clicks and area

Lucas de Souza 5 سال پیش
والد
کامیت
710f10a370

BIN
cursos/matutino_A/package_iassign_Matheus_Lima_de_Araujo-2.2_2019_03_26_12.zip


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
dist/line_heatmap.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
dist/line_heatmap.js.map


+ 58 - 40
src/heatContainer.js

@@ -115,10 +115,29 @@ function countClicks (x1, y1, x2, y2) {
   return counter;
 }
 
+function getClicksInWindow (x1, y1, x2, y2) {
+  const instance = stateObject['heatmap'].instance;
+  const points = instance.getData().data;
+  const list = [];
+  for(let i = 0; i < points.length; ++i) {
+    const point = points[i];
+    if (point.x >= x1 && point.y >= y1) {
+      if (point.x <= x2 && point.y <= y2) {
+       list.push(point);
+      }
+    }
+  }
+  return list;
+}
+
 function totalClicks () {
   return stateObject['data'].length;
 }
 
+function getData () {
+  return stateObject['data'];
+}
+
 function logTransform (logString) {
   const data = logString.split("\n")
   .filter(v => v.split(',').length > 3)
@@ -193,49 +212,48 @@ function updateDivText (div, posLeft, posTop, xBottom, yBottom) {
   <span style="font-size:14px">Proporção em relação ao total: ${ratio}</span>`;
 }
 
-
-export default {
-  init,
-  updateLogString,
-  countClicks,
-  totalClicks
+function clicksEuclideanDist (points) {
+  if(points.length <= 1) {
+    return 0;
+  } else if (points.length == 2) {
+    const p1 = points[0];
+    const p2 = points[1];
+    return euclideanDist(p1, p2);
+  } else {
+    let count = 0;
+    points.reduce((p1, p2) => {
+      count += euclideanDist(p1, p2);
+      return p2;
+    });
+    return count;
+  }
 }
 
-/**
- var x1, y1, x2, y2;
-var sequencia = 1;
+function calcPixelsPerClick () {
+  const data = getData();
+  const totalPixels = clicksEuclideanDist(data);
+  return totalPixels / totalClicks();
+}
 
-window.onclick = function(evt) {
-    var elemen = document.querySelector(".heatmap-canvas");
-    if (sequencia == 1) {
-     if (evt.pageX || evt.pageY) {
-        x1 = evt.pageX;
-        y1 = evt.pageY;
-     } else {
-        x1 = evt.clientX + document.body.scrollLeft + elemen.scrollLeft;
-        y1 = evt.clientY + document.body.scrollTop + elemen.scrollTop;
-       }
-     x1 -= elemen.offsetLeft;
-       y1 -= elemen.offsetTop;
-       sequencia ++;
-    } else {
-      if (evt.pageX || evt.pageY) {
-        x2 = evt.pageX;
-        y2 = evt.pageY;
-     } else {
-        x2 = evt.clientX + document.body.scrollLeft + elemen.scrollLeft;
-        y2 = evt.clientY + document.body.scrollTop + elemen.scrollTop;
-       }
-    x2 -= elemen.offsetLeft;
-       y2 -= elemen.offsetTop;
-       
-      var width = Math.abs(x2 - x1);
-      var height = Math.abs(y2 - y1);
-      sequencia = 1;
+function calcPixelsPerClickInArea () {
+  if(div == null) {
+    return 0;
+  }
+  const data = getClicksInWindow(posLeft, posTop, xBottom, yBottom);
+  const totalPixels = clicksEuclideanDist(data);
+  return totalPixels / countClicks(posLeft, posTop, xBottom, yBottom);
+}
 
+function euclideanDist (p1, p2) {
+  return Math.sqrt(Math.pow(p1.x-p2.x, 2) + Math.pow(p1.y-p2.y, 2));
+}
 
-        $('#line-heatmap-canvas').append($('<div style="position: absolute; border: 1px solid green; top: '+(y1 - 580)+'px; left: '+x1+'px; width: '+width+'px; height: '+height+'px; "></div>'));
-            
-    }
+export default {
+  init,
+  updateLogString,
+  countClicks,
+  totalClicks,
+  getData,
+  calcPixelsPerClick,
+  calcPixelsPerClickInArea
 }
- */