summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/visualization/projections
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/visualization/projections')
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java20
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java32
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java33
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java94
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java12
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java2
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java10
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java20
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java15
10 files changed, 169 insertions, 73 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java
index 6b08f033..e8f7a91a 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/AbstractFullProjection.java
@@ -52,12 +52,12 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return vector in scaled space
*/
@Override
- public Vector projectDataToScaledSpace(NumberVector<?, ?> data) {
+ public Vector projectDataToScaledSpace(NumberVector<?> data) {
final int dim = data.getDimensionality();
Vector vec = new Vector(dim);
double[] ds = vec.getArrayRef();
for(int d = 0; d < dim; d++) {
- ds[d] = scales[d].getScaled(data.doubleValue(d + 1));
+ ds[d] = scales[d].getScaled(data.doubleValue(d));
}
return vec;
}
@@ -86,12 +86,12 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return relative vector in scaled space
*/
@Override
- public Vector projectRelativeDataToScaledSpace(NumberVector<?, ?> data) {
+ public Vector projectRelativeDataToScaledSpace(NumberVector<?> data) {
final int dim = data.getDimensionality();
Vector vec = new Vector(dim);
double[] ds = vec.getArrayRef();
for(int d = 0; d < dim; d++) {
- ds[d] = scales[d].getRelativeScaled(data.doubleValue(d + 1));
+ ds[d] = scales[d].getRelativeScaled(data.doubleValue(d));
}
return vec;
}
@@ -120,7 +120,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return vector in rendering space
*/
@Override
- public Vector projectDataToRenderSpace(NumberVector<?, ?> data) {
+ public Vector projectDataToRenderSpace(NumberVector<?> data) {
return projectScaledToRender(projectDataToScaledSpace(data));
}
@@ -142,7 +142,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return relative vector in rendering space
*/
@Override
- public Vector projectRelativeDataToRenderSpace(NumberVector<?, ?> data) {
+ public Vector projectRelativeDataToRenderSpace(NumberVector<?> data) {
return projectRelativeScaledToRender(projectRelativeDataToScaledSpace(data));
}
@@ -166,7 +166,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return vector in data space
*/
@Override
- public <NV extends NumberVector<NV, ?>> NV projectScaledToDataSpace(Vector v, NV factory) {
+ public <NV extends NumberVector<?>> NV projectScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> factory) {
final int dim = v.getDimensionality();
Vector vec = v.copy();
double[] ds = vec.getArrayRef();
@@ -185,7 +185,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return vector in data space
*/
@Override
- public <NV extends NumberVector<NV, ?>> NV projectRenderToDataSpace(Vector v, NV prototype) {
+ public <NV extends NumberVector<?>> NV projectRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) {
final int dim = v.getDimensionality();
Vector vec = projectRenderToScaled(v);
double[] ds = vec.getArrayRef();
@@ -206,7 +206,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return relative vector in data space
*/
@Override
- public <NV extends NumberVector<NV, ?>> NV projectRelativeScaledToDataSpace(Vector v, NV prototype) {
+ public <NV extends NumberVector<?>> NV projectRelativeScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) {
final int dim = v.getDimensionality();
Vector vec = v.copy();
double[] ds = vec.getArrayRef();
@@ -225,7 +225,7 @@ public abstract class AbstractFullProjection extends AbstractProjection implemen
* @return relative vector in data space
*/
@Override
- public <NV extends NumberVector<NV, ?>> NV projectRelativeRenderToDataSpace(Vector v, NV prototype) {
+ public <NV extends NumberVector<?>> NV projectRelativeRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype) {
final int dim = v.getDimensionality();
Vector vec = projectRelativeRenderToScaled(v);
double[] ds = vec.getArrayRef();
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java
index 10533ee0..0e184e32 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/AffineProjection.java
@@ -109,7 +109,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
@Override
public CanvasSize estimateViewport() {
- if(viewport == null) {
+ if (viewport == null) {
final int dim = proj.getDimensionality();
DoubleMinMax minmaxx = new DoubleMinMax();
DoubleMinMax minmaxy = new DoubleMinMax();
@@ -121,14 +121,14 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
minmaxy.put(orig.get(1));
// Diagonal point
Vector diag = new Vector(dim);
- for(int d2 = 0; d2 < dim; d2++) {
+ for (int d2 = 0; d2 < dim; d2++) {
diag.set(d2, 1);
}
diag = projectScaledToRender(diag);
minmaxx.put(diag.get(0));
minmaxy.put(diag.get(1));
// Axis end points
- for(int d = 0; d < dim; d++) {
+ for (int d = 0; d < dim; d++) {
Vector v = new Vector(dim);
v.set(d, 1);
Vector ax = projectScaledToRender(v);
@@ -154,7 +154,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
AffineTransformation proj = AffineTransformation.reorderAxesTransformation(dim, new int[] { ax1, ax2 });
// Assuming that the data was normalized on [0:1], center it:
double[] trans = new double[dim];
- for(int i = 0; i < dim; i++) {
+ for (int i = 0; i < dim; i++) {
trans[i] = -.5;
}
proj.addTranslation(new Vector(trans));
@@ -173,7 +173,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
}
@Override
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> data) {
return fastProjectScaledToRenderSpace(fastProjectDataToScaledSpace(data));
}
@@ -184,7 +184,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
}
@Override
- public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectDataToScaledSpace(NumberVector<?> data) {
// FIXME: implement with less objects?
return projectDataToScaledSpace(data).getArrayRef();
}
@@ -201,7 +201,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
final double[] cols = matrix[vr.length];
assert (colx.length == coly.length && colx.length == cols.length && cols.length == vr.length + 1);
- for(int k = 0; k < vr.length; k++) {
+ for (int k = 0; k < vr.length; k++) {
x += colx[k] * vr[k];
y += coly[k] * vr[k];
s += cols[k] * vr[k];
@@ -210,7 +210,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
x += colx[vr.length];
y += coly[vr.length];
s += cols[vr.length];
- assert (s != 0.0);
+ assert (s > 0.0 || s < 0.0);
return new double[] { x / s, y / s };
}
@@ -221,7 +221,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
}
@Override
- public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data) {
// FIXME: implement with less objects?
return fastProjectRelativeScaledToRenderSpace(projectRelativeDataToScaledSpace(data).getArrayRef());
}
@@ -236,7 +236,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
final double[] coly = matrix[1];
assert (colx.length == coly.length);
- for(int k = 0; k < vr.length; k++) {
+ for (int k = 0; k < vr.length; k++) {
x += colx[k] * vr[k];
y += coly[k] * vr[k];
}
@@ -246,7 +246,7 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
@Override
public double[] fastProjectRenderToDataSpace(double[] data) {
double[] ret = fastProjectRenderToScaledSpace(data);
- for(int d = 0; d < scales.length; d++) {
+ for (int d = 0; d < scales.length; d++) {
ret[d] = scales[d].getUnscaled(ret[d]);
}
return ret;
@@ -254,11 +254,11 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
@Override
public double[] fastProjectRenderToScaledSpace(double[] v) {
- if(v.length == scales.length) {
+ if (v.length == scales.length) {
return projectRenderToScaled(new Vector(v)).getArrayRef();
}
double[] c = Arrays.copyOf(v, scales.length);
- for(int d = v.length; d < scales.length; d++) {
+ for (int d = v.length; d < scales.length; d++) {
c[d] = 0.5;
}
return projectRenderToScaled(new Vector(c)).getArrayRef();
@@ -269,16 +269,16 @@ public class AffineProjection extends AbstractFullProjection implements Projecti
final int dim = proj.getDimensionality();
BitSet actDim = new BitSet(dim);
Vector vScale = new Vector(dim);
- for(int d = 0; d < dim; d++) {
+ for (int d = 0; d < dim; d++) {
vScale.setZero();
vScale.set(d, 1);
double[] vRender = fastProjectScaledToRenderSpace(vScale.getArrayRef());
// TODO: Can't we do this by inspecting the projection matrix directly?
- if(vRender[0] != 0.0 || vRender[1] != 0) {
+ if (vRender[0] > 0.0 || vRender[0] < 0.0 || vRender[1] != 0) {
actDim.set(d);
}
}
return actDim;
}
-} \ No newline at end of file
+}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java
index cc1433aa..02705355 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/FullProjection.java
@@ -24,7 +24,6 @@ package de.lmu.ifi.dbs.elki.visualization.projections;
*/
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
-import de.lmu.ifi.dbs.elki.visualization.projections.Projection;
/**
* Full vector space projections.
@@ -44,7 +43,7 @@ public interface FullProjection extends Projection {
* @param v vector in scaled space
* @return vector in rendering space
*/
- public Vector projectScaledToRender(Vector v);
+ Vector projectScaledToRender(Vector v);
/**
* Project a vector from rendering space to scaled space.
@@ -52,7 +51,7 @@ public interface FullProjection extends Projection {
* @param v vector in rendering space
* @return vector in scaled space
*/
- public Vector projectRenderToScaled(Vector v);
+ Vector projectRenderToScaled(Vector v);
/**
* Project a relative vector from scaled space to rendering space.
@@ -60,7 +59,7 @@ public interface FullProjection extends Projection {
* @param v relative vector in scaled space
* @return relative vector in rendering space
*/
- public Vector projectRelativeScaledToRender(Vector v);
+ Vector projectRelativeScaledToRender(Vector v);
/**
* Project a relative vector from rendering space to scaled space.
@@ -68,7 +67,7 @@ public interface FullProjection extends Projection {
* @param v relative vector in rendering space
* @return relative vector in scaled space
*/
- public Vector projectRelativeRenderToScaled(Vector v);
+ Vector projectRelativeRenderToScaled(Vector v);
/**
* Project a data vector from data space to scaled space.
@@ -76,7 +75,7 @@ public interface FullProjection extends Projection {
* @param data vector in data space
* @return vector in scaled space
*/
- public Vector projectDataToScaledSpace(NumberVector<?, ?> data);
+ Vector projectDataToScaledSpace(NumberVector<?> data);
/**
* Project a data vector from data space to scaled space.
@@ -84,7 +83,7 @@ public interface FullProjection extends Projection {
* @param data vector in data space
* @return vector in scaled space
*/
- public Vector projectDataToScaledSpace(Vector data);
+ Vector projectDataToScaledSpace(Vector data);
/**
* Project a relative data vector from data space to scaled space.
@@ -92,7 +91,7 @@ public interface FullProjection extends Projection {
* @param data relative vector in data space
* @return relative vector in scaled space
*/
- public Vector projectRelativeDataToScaledSpace(NumberVector<?, ?> data);
+ Vector projectRelativeDataToScaledSpace(NumberVector<?> data);
/**
* Project a relative data vector from data space to scaled space.
@@ -100,7 +99,7 @@ public interface FullProjection extends Projection {
* @param data relative vector in data space
* @return relative vector in scaled space
*/
- public Vector projectRelativeDataToScaledSpace(Vector data);
+ Vector projectRelativeDataToScaledSpace(Vector data);
/**
* Project a data vector from data space to rendering space.
@@ -108,7 +107,7 @@ public interface FullProjection extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public Vector projectDataToRenderSpace(NumberVector<?, ?> data);
+ Vector projectDataToRenderSpace(NumberVector<?> data);
/**
* Project a data vector from data space to rendering space.
@@ -116,7 +115,7 @@ public interface FullProjection extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public Vector projectDataToRenderSpace(Vector data);
+ Vector projectDataToRenderSpace(Vector data);
/**
* Project a vector from scaled space to data space.
@@ -126,7 +125,7 @@ public interface FullProjection extends Projection {
* @param factory Object factory
* @return vector in data space
*/
- public <NV extends NumberVector<NV, ?>> NV projectScaledToDataSpace(Vector v, NV factory);
+ <NV extends NumberVector<?>> NV projectScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> factory);
/**
* Project a vector from rendering space to data space.
@@ -136,7 +135,7 @@ public interface FullProjection extends Projection {
* @param prototype Object factory
* @return vector in data space
*/
- public <NV extends NumberVector<NV, ?>> NV projectRenderToDataSpace(Vector v, NV prototype);
+ <NV extends NumberVector<?>> NV projectRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype);
/**
* Project a relative data vector from data space to rendering space.
@@ -144,7 +143,7 @@ public interface FullProjection extends Projection {
* @param data relative vector in data space
* @return relative vector in rendering space
*/
- public Vector projectRelativeDataToRenderSpace(NumberVector<?, ?> data);
+ Vector projectRelativeDataToRenderSpace(NumberVector<?> data);
/**
* Project a relative data vector from data space to rendering space.
@@ -152,7 +151,7 @@ public interface FullProjection extends Projection {
* @param data relative vector in data space
* @return relative vector in rendering space
*/
- public Vector projectRelativeDataToRenderSpace(Vector data);
+ Vector projectRelativeDataToRenderSpace(Vector data);
/**
* Project a relative vector from scaled space to data space.
@@ -162,7 +161,7 @@ public interface FullProjection extends Projection {
* @param prototype Object factory
* @return relative vector in data space
*/
- public <NV extends NumberVector<NV, ?>> NV projectRelativeScaledToDataSpace(Vector v, NV prototype);
+ <NV extends NumberVector<?>> NV projectRelativeScaledToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype);
/**
* Project a relative vector from rendering space to data space.
@@ -172,5 +171,5 @@ public interface FullProjection extends Projection {
* @param prototype Object factory
* @return relative vector in data space
*/
- public <NV extends NumberVector<NV, ?>> NV projectRelativeRenderToDataSpace(Vector v, NV prototype);
+ <NV extends NumberVector<?>> NV projectRelativeRenderToDataSpace(Vector v, NumberVector.Factory<NV, ?> prototype);
}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java
new file mode 100644
index 00000000..9a6dd9b8
--- /dev/null
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/OPTICSProjection.java
@@ -0,0 +1,94 @@
+package de.lmu.ifi.dbs.elki.visualization.projections;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2012
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance;
+import de.lmu.ifi.dbs.elki.math.scales.LinearScale;
+import de.lmu.ifi.dbs.elki.result.AbstractHierarchicalResult;
+import de.lmu.ifi.dbs.elki.result.optics.ClusterOrderResult;
+import de.lmu.ifi.dbs.elki.visualization.VisualizerContext;
+import de.lmu.ifi.dbs.elki.visualization.opticsplot.OPTICSPlot;
+import de.lmu.ifi.dbs.elki.visualization.projector.OPTICSProjector;
+
+/**
+ * OPTICS projection. This is not really needed, but a quick hack to have more
+ * consistency in the visualizer API.
+ *
+ * @author Erich Schubert
+ */
+public class OPTICSProjection<D extends Distance<D>> extends AbstractHierarchicalResult implements Projection {
+ /**
+ * The projector we were generated from.
+ */
+ OPTICSProjector<D> projector;
+
+ /**
+ * Constructor.
+ *
+ * @param opticsProjector OPTICS projector
+ */
+ public OPTICSProjection(OPTICSProjector<D> opticsProjector) {
+ super();
+ this.projector = opticsProjector;
+ }
+
+ @Override
+ public String getLongName() {
+ return "OPTICS projection";
+ }
+
+ @Override
+ public String getShortName() {
+ return "OPTICSproj";
+ }
+
+ @Override
+ public int getInputDimensionality() {
+ return -1;
+ }
+
+ @Override
+ public LinearScale getScale(int d) {
+ return null;
+ }
+
+ /**
+ * Get or produce the actual OPTICS plot.
+ *
+ * @param context Context to use
+ * @return Plot
+ */
+ public OPTICSPlot<D> getOPTICSPlot(VisualizerContext context) {
+ return projector.getOPTICSPlot(context);
+ }
+
+ /**
+ * Get the OPTICS cluster order.
+ *
+ * @return Cluster oder result.
+ */
+ public ClusterOrderResult<D> getResult() {
+ return projector.getResult();
+ }
+}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java
index 2232e0b9..82c9483d 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection1D.java
@@ -48,7 +48,7 @@ public interface Projection1D extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public double fastProjectDataToRenderSpace(NumberVector<?, ?> data);
+ public double fastProjectDataToRenderSpace(NumberVector<?> data);
/**
* Project a vector from scaled space to rendering space.
@@ -72,7 +72,7 @@ public interface Projection1D extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public double fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data);
+ public double fastProjectRelativeDataToRenderSpace(NumberVector<?> data);
/**
* Project a vector from scaled space to rendering space.
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java
index 66518c8f..acd4a829 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Projection2D.java
@@ -34,6 +34,8 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* @author Erich Schubert
*
* @apiviz.landmark
+ *
+ * @apiviz.has CanvasSize
*/
public interface Projection2D extends Projection {
/**
@@ -50,7 +52,7 @@ public interface Projection2D extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data);
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> data);
/**
* Project a data vector from data space to scaled space.
@@ -66,7 +68,7 @@ public interface Projection2D extends Projection {
* @param data vector in data space
* @return vector in scaled space
*/
- public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data);
+ public double[] fastProjectDataToScaledSpace(NumberVector<?> data);
/**
* Project a vector from scaled space to rendering space.
@@ -91,7 +93,7 @@ public interface Projection2D extends Projection {
* @param prototype Prototype to create vector from
* @return vector in data space
*/
- // public <V extends NumberVector<V, ?>> V fastProjectRenderToDataSpace(double[] data, V prototype);
+ // public <V extends NumberVector<?>> V fastProjectRenderToDataSpace(double[] data, V prototype);
/**
* Project a vector from rendering space to scaled space.
@@ -115,7 +117,7 @@ public interface Projection2D extends Projection {
* @param data vector in data space
* @return vector in rendering space
*/
- public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data);
+ public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data);
/**
* Project a vector from scaled space to rendering space.
@@ -140,4 +142,4 @@ public interface Projection2D extends Projection {
* @return Bit set, first dimension is bit 0.
*/
public BitSet getVisibleDimensions2D();
-} \ No newline at end of file
+}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java
index 03e8a245..98c2ac33 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java
@@ -166,7 +166,7 @@ public interface ProjectionParallel extends Projection {
* @param v Input vector
* @return Vector with reordering, inversions and scales applied.
*/
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> v);
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> v);
/**
* Project the value of a single axis to its display value
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java
index b701c934..ef97fe15 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple1D.java
@@ -42,11 +42,11 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D {
* Simple 1D projection using scaling only.
*
* @param scales Scales to use
- * @param dnum Dimension (starting at 1)
+ * @param dnum Dimension (starting at 0)
*/
public Simple1D(LinearScale[] scales, int dnum) {
super(scales);
- this.dnum = dnum - 1;
+ this.dnum = dnum;
}
@Override
@@ -55,8 +55,8 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D {
}
@Override
- public double fastProjectDataToRenderSpace(NumberVector<?, ?> data) {
- return (scales[dnum].getScaled(data.doubleValue(dnum + 1)) - 0.5) * SCALE;
+ public double fastProjectDataToRenderSpace(NumberVector<?> data) {
+ return (scales[dnum].getScaled(data.doubleValue(dnum)) - 0.5) * SCALE;
}
@Override
@@ -70,7 +70,7 @@ public class Simple1D extends AbstractSimpleProjection implements Projection1D {
}
@Override
- public double fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) {
+ public double fastProjectRelativeDataToRenderSpace(NumberVector<?> data) {
return (data.doubleValue(dnum) - 0.5) * SCALE;
}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java
index 1964f12b..81821a7c 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/Simple2D.java
@@ -54,8 +54,8 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D {
*/
public Simple2D(LinearScale[] scales, int ax1, int ax2) {
super(scales);
- this.dim1 = ax1 - 1;
- this.dim2 = ax2 - 1;
+ this.dim1 = ax1;
+ this.dim2 = ax2;
}
@Override
@@ -66,9 +66,9 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D {
}
@Override
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) {
- double x = (scales[dim1].getScaled(data.doubleValue(dim1 + 1)) - 0.5) * SCALE;
- double y = (scales[dim2].getScaled(data.doubleValue(dim2 + 1)) - 0.5) * -SCALE;
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> data) {
+ double x = (scales[dim1].getScaled(data.doubleValue(dim1)) - 0.5) * SCALE;
+ double y = (scales[dim2].getScaled(data.doubleValue(dim2)) - 0.5) * -SCALE;
return new double[] { x, y };
}
@@ -83,11 +83,11 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D {
}
@Override
- public double[] fastProjectDataToScaledSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectDataToScaledSpace(NumberVector<?> data) {
final int dim = data.getDimensionality();
double[] ds = new double[dim];
for(int d = 0; d < dim; d++) {
- ds[d] = scales[d].getScaled(data.doubleValue(d + 1));
+ ds[d] = scales[d].getScaled(data.doubleValue(d));
}
return ds;
}
@@ -141,9 +141,9 @@ public class Simple2D extends AbstractSimpleProjection implements Projection2D {
}
@Override
- public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?, ?> data) {
- double x = scales[dim1].getRelativeScaled(data.doubleValue(dim1 + 1)) * SCALE;
- double y = scales[dim2].getRelativeScaled(data.doubleValue(dim2 + 1)) * -SCALE;
+ public double[] fastProjectRelativeDataToRenderSpace(NumberVector<?> data) {
+ double x = scales[dim1].getRelativeScaled(data.doubleValue(dim1)) * SCALE;
+ double y = scales[dim2].getRelativeScaled(data.doubleValue(dim2)) * -SCALE;
return new double[] { x, y };
}
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java b/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java
index c843d61d..6b07895d 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/projections/SimpleParallel.java
@@ -182,12 +182,13 @@ public class SimpleParallel extends BasicResult implements ProjectionParallel {
@Override
public int getDimForVisibleAxis(int pos) {
for(int i = 0; i < scales.length; i++) {
- if (isAxisVisible(i)) {
- if (pos == 0) {
- return dimOrder[i];
- }
- pos--;
+ if (isDimHidden(dimOrder[i])) {
+ continue;
+ }
+ if (pos == 0) {
+ return dimOrder[i];
}
+ pos--;
}
return -1;
}
@@ -214,14 +215,14 @@ public class SimpleParallel extends BasicResult implements ProjectionParallel {
}
@Override
- public double[] fastProjectDataToRenderSpace(NumberVector<?, ?> data) {
+ public double[] fastProjectDataToRenderSpace(NumberVector<?> data) {
double[] v = new double[visDims];
for(int j = 0, o = 0; j < scales.length; j++) {
if(isDimHidden(j)) {
continue;
}
int i = dimOrder[j];
- v[o] = scales[i].getScaled(data.doubleValue(i + 1));
+ v[o] = scales[i].getScaled(data.doubleValue(i));
if(!isDimInverted(i)) {
v[o] = 1 - v[o];
}