summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java b/src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
index 317e47c1..231e8637 100644
--- a/src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
+++ b/src/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.math.spacefillingcurves;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2012
+ Copyright (C) 2013
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -57,19 +57,20 @@ public class HilbertSpatialSorter extends AbstractSpatialSorter {
}
@Override
- public <T extends SpatialComparable> void sort(List<T> objs, int start, int end, double[] minmax) {
- final int dim = minmax.length >> 1;
- List<HilbertRef<T>> tmp = new ArrayList<HilbertRef<T>>(end - start);
+ public <T extends SpatialComparable> void sort(List<T> objs, int start, int end, double[] minmax, int[] dims) {
+ final int dim = (dims != null) ? dims.length : (minmax.length >> 1);
+ List<HilbertRef<T>> tmp = new ArrayList<>(end - start);
int[] buf = new int[dim];
for (int i = start; i < end; i++) {
T v = objs.get(i);
// Convert into integers
- for (int d = 0, d2 = 0; d < dim; d++, d2 += 2) {
- double val = (v.getMin(d) + v.getMax(d)) * .5;
- val = Integer.MAX_VALUE * ((val - minmax[d2]) / (minmax[d2 + 1] - minmax[d2]));
+ for (int d = 0; d < dim; d++) {
+ final int ed = (dims != null) ? dims[d] : d, ed2 = ed << 1;
+ double val = (v.getMin(ed) + v.getMax(ed)) * .5;
+ val = Integer.MAX_VALUE * ((val - minmax[ed2]) / (minmax[ed2 + 1] - minmax[ed2]));
buf[d] = (int) val;
}
- tmp.add(new HilbertRef<T>(v, coordinatesToHilbert(buf, Integer.SIZE - 1, 1)));
+ tmp.add(new HilbertRef<>(v, coordinatesToHilbert(buf, Integer.SIZE - 1, 1)));
}
// Sort and copy back
Collections.sort(tmp);