diff src/DistanceMetric.cpp @ 157:d6c1556fadd0 refactors

Default is actually Manhattan, not Euclidean (it just looks like squared-Euclidean for energy vectors). Add Euclidean as another alternative.
author Chris Cannam
date Thu, 29 Jan 2015 10:55:24 +0000
parents d6df9fe7b12f
children d1bc89794cd4
line wrap: on
line diff
--- a/src/DistanceMetric.cpp	Thu Jan 29 10:25:47 2015 +0000
+++ b/src/DistanceMetric.cpp	Thu Jan 29 10:55:24 2015 +0000
@@ -62,13 +62,21 @@
         if (d > 1.0) d = 1.0;
         
         return d; // normalisation param ignored
+
     }
 
-    // Euclidean
-    
-    for (int i = 0; i < featureSize; i++) {
-        d += fabs(f1[i] - f2[i]);
-        sum += fabs(f1[i]) + fabs(f2[i]);
+    if (m_params.metric == Manhattan) {
+        for (int i = 0; i < featureSize; i++) {
+            d += fabs(f1[i] - f2[i]);
+            sum += fabs(f1[i]) + fabs(f2[i]);
+        }
+    } else {
+        // Euclidean
+        for (int i = 0; i < featureSize; i++) {
+            d += (f1[i] - f2[i]) * (f1[i] - f2[i]);
+            sum += fabs(f1[i]) + fabs(f2[i]);
+        }
+        d = sqrt(d);
     }
 
     double noise = 1e-3 * featureSize;