فهرست منبع

Added normalizeData()

Added method to normalize the data and create more fluid graphs
Kenneth van Ewijk 11 سال پیش
والد
کامیت
17066aed8b
1فایلهای تغییر یافته به همراه42 افزوده شده و 3 حذف شده
  1. 42 3
      GUIboard.java

+ 42 - 3
GUIboard.java

@@ -159,6 +159,9 @@ public class GUIboard {
     public static void writeGraphToMatrix(ArrayList<Double> msList, double min, double max)
     {
         clearBottom();
+        
+        msList = normalizeData(msList, (max-min)/32);
+        
         createAxis(min,max);
         
         int x,y;
@@ -166,7 +169,7 @@ public class GUIboard {
         for(double i=0;i<msList.size();i++)
         {
             getal = msList.get((int)i);
-            x = (int)((i/msList.size())*127.0);
+            x = (int)(i/(msList.size()-1)*127.0);
             double temp = ((getal - min)/(max-min));
             y = (int)(temp*31.0);
             y = 31 - y;
@@ -177,8 +180,6 @@ public class GUIboard {
     //Private functions
     public static void createAxis(double min, double max)
     {        
-        //temp
-        
         int x,y;
         double diff = max-min;
         double valpix = diff/32;
@@ -200,14 +201,52 @@ public class GUIboard {
             }
         }
         
+        /*
         x = 0;
         
         for(int y2 = 0; y2 < 32; y2++)
         {
             IO.writeShort(0x42, 1 << 12 | x << 5 | y2 );
         }
+        */
+    }
+    
+    private static ArrayList<Double> normalizeData(ArrayList<Double> data2 , double margin){
+        
+        ArrayList<Double> data = new ArrayList<Double>(data2);
+        
+        double prevPrevVal = 0.0, prevVal = 0.0, nextVal = 0.0, nextNextVal = 0.0, avrVal = 0.0, setVal = 0.0;
+        
+        for(int i = 0; i < data.size(); i ++){
+            if(i + 1 < data.size()){
+                nextVal = data.get(i+1);
+            }
+            if(i + 2 < data.size()){
+                nextNextVal = data.get(i+2);
+            }
+            if(prevPrevVal > 0 && prevVal > 0 && nextVal > 0 && nextNextVal > 0){
+                avrVal = (prevPrevVal + prevVal + nextVal + nextNextVal) / 4;
+                if((data.get(i) - avrVal) >= margin){
+                    setVal = avrVal;
+                }else{
+                    setVal = data.get(i);
+                }
+            }else{
+                setVal = data.get(i);
+            }
+            
+            data.set(i, setVal);
+            prevVal = data.get(i);
+            
+            if(i - 1 >= 0){
+                prevPrevVal = data.get(i-1);
+            }
+        }
+        
+        return data;
     }
     
+    
     public  static void clearTop()
     {
          IO.writeShort(0x10, 0x100 | 0x0);