Index: trunk/FACT++/www/viewer/index.js
===================================================================
--- trunk/FACT++/www/viewer/index.js	(revision 17807)
+++ trunk/FACT++/www/viewer/index.js	(revision 17808)
@@ -579,4 +579,6 @@
     if (rc.ret!==undefined && Array.isArray(rc.ret))
     {
+        var now = new Date();
+
         if (rc.ret[0] instanceof Object)
             processCameraData(1, rc.ret[0]);
@@ -592,4 +594,6 @@
         if (rc.ret.length>3)
             processCameraData(4, rc.ret[3]);
+
+        debug("Calc Time = "+(new Date()-now)+" ms");
     }
 
@@ -1428,4 +1432,8 @@
     var sz = 0;
 
+    var mx2 = 0;
+    var my2 = 0;
+    var mxy = 0;
+
     var cnt = 0;
     for (var i=0; i<1440; i++)
@@ -1434,46 +1442,25 @@
             continue;
 
-        sz += data[i];
-        mx += data[i] * coord[i][0];
-        my += data[i] * coord[i][1];
+        sz  += data[i];
+        mx  += data[i] * coord[i][0];
+        my  += data[i] * coord[i][1];
+
+        mx2 += data[i] * coord[i][0]*coord[i][0];
+        my2 += data[i] * coord[i][1]*coord[i][1];
+        mxy += data[i] * coord[i][0]*coord[i][1];
 
         cnt++;
     }
 
-    if (sz==0)
+    if (sz==0 || cnt<3)
         return;
 
-    mx /= sz;
-    my /= sz;
-
-    if (cnt<3)
-        return;
-
-    var xx=0;
-    var xy=0;
-    var yy=0;
-
-    for (var i=0; i<1440; i++)
-    {
-        if (data[i]===undefined)
-            continue;
-
-        var dx = coord[i][0] - mx;
-        var dy = coord[i][1] - my;
-
-        xx += data[i] * dx*dx;
-        xy += data[i] * dx*dy;
-        yy += data[i] * dy*dy;
-    }
-
-    var d0    = yy - xx;
-    var d1    = xy*2;
-    var d2    = Math.sqrt(d0*d0 + d1*d1) + d0;
-
-    var tand  = d2==0 ? 0 : d2 / d1;
-    var tand2 = tand*tand;
-
-    var s2    = tand2+1;
-    var s     = Math.sqrt(s2);
+    var xx = mx2 - mx*mx/sz;
+    var yy = my2 - my*my/sz;
+    var xy = mxy - mx*my/sz;
+
+    var d0  = yy - xx;
+    var d1  = xy*2;
+    var d2  = Math.sqrt(d0*d0 + d1*d1) + d0;
 
     var phi = 0;
@@ -1487,4 +1474,10 @@
     if (d1!=0 || d2==0)
     {
+        var tand  = d2==0 ? 0 : d2 / d1;
+        var tand2 = tand*tand;
+
+        var s2    = tand2+1;
+        var s     = Math.sqrt(s2);
+
         phi = Math.atan(tand)-Math.PI/2;
         cos = 1.0 /s;
@@ -1500,5 +1493,5 @@
 
     return {
-        "mean":  [ mx, my ],
+        "mean":  [ mx/sz, my/sz ],
         "axis":  [ width, length ],
         "phi":   phi,
