diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java index fd19bfef..03563c6f 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -24,6 +24,14 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction; */ import de.lmu.ifi.dbs.elki.data.NumberVector; +import de.lmu.ifi.dbs.elki.data.VectorUtil; +import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; +import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; +import de.lmu.ifi.dbs.elki.data.type.TypeUtil; +import de.lmu.ifi.dbs.elki.database.query.distance.SpatialDistanceQuery; +import de.lmu.ifi.dbs.elki.database.query.distance.SpatialPrimitiveDistanceQuery; +import de.lmu.ifi.dbs.elki.database.relation.Relation; +import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; /** @@ -34,12 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * * @author Arthur Zimek */ -public class ArcCosineDistanceFunction extends AbstractCosineDistanceFunction { +public class ArcCosineDistanceFunction extends AbstractVectorDoubleDistanceFunction implements SpatialPrimitiveDoubleDistanceFunction<NumberVector<?, ?>> { /** * Static instance */ public static final ArcCosineDistanceFunction STATIC = new ArcCosineDistanceFunction(); - + /** * Provides a CosineDistanceFunction. * @@ -61,8 +69,8 @@ public class ArcCosineDistanceFunction extends AbstractCosineDistanceFunction { * @return the cosine distance for two given feature vectors v1 and v2 */ @Override - public double doubleDistance(NumberVector<?,?> v1, NumberVector<?,?> v2) { - double d = Math.acos(angle(v1, v2)); + public double doubleDistance(NumberVector<?, ?> v1, NumberVector<?, ?> v2) { + double d = Math.acos(VectorUtil.cosAngle(v1, v2)); if(d < 0) { d = 0; } @@ -70,6 +78,20 @@ public class ArcCosineDistanceFunction extends AbstractCosineDistanceFunction { } @Override + public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) { + double d = Math.acos(VectorUtil.minCosAngle(mbr1, mbr2)); + if(d < 0) { + d = 0; + } + return d; + } + + @Override + public DoubleDistance minDist(SpatialComparable mbr1, SpatialComparable mbr2) { + return new DoubleDistance(doubleMinDist(mbr1, mbr2)); + } + + @Override public String toString() { return "ArcCosineDistance"; } @@ -85,6 +107,16 @@ public class ArcCosineDistanceFunction extends AbstractCosineDistanceFunction { return this.getClass().equals(obj.getClass()); } + @Override + public <T extends NumberVector<?, ?>> SpatialDistanceQuery<T, DoubleDistance> instantiate(Relation<T> relation) { + return new SpatialPrimitiveDistanceQuery<T, DoubleDistance>(relation, this); + } + + @Override + public SimpleTypeInformation<? super NumberVector<?, ?>> getInputTypeRestriction() { + return TypeUtil.NUMBER_VECTOR_VARIABLE_LENGTH; + } + /** * Parameterization class. * |