summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java
diff options
context:
space:
mode:
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.java42
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.
*