diff --git a/src/mhtree/ObjectToNodeDistance.java b/src/mhtree/ObjectToNodeDistance.java index f9430f273544340b388207b3d4a2258dd231d556..734a72c629801edf60a66b70a48e8978cfcbc210 100644 --- a/src/mhtree/ObjectToNodeDistance.java +++ b/src/mhtree/ObjectToNodeDistance.java @@ -1,7 +1,34 @@ package mhtree; +import messif.objects.LocalAbstractObject; + public enum ObjectToNodeDistance { - NEAREST_HULL_OBJECT, - FURTHEST_HULL_OBJECT, - AVERAGE_DISTANCE, + NEAREST_HULL_OBJECT { + @Override + public double getDistance(LocalAbstractObject object, Node node) { + return node.getHullObjects().stream() + .mapToDouble(object::getDistance) + .min() + .orElse(Double.MAX_VALUE); + } + }, + FURTHEST_HULL_OBJECT { + @Override + public double getDistance(LocalAbstractObject object, Node node) { + return node.getHullObjects().stream() + .mapToDouble(object::getDistance) + .max() + .orElse(Double.MIN_VALUE); + } + }, + AVERAGE_DISTANCE { + @Override + public double getDistance(LocalAbstractObject object, Node node) { + return node.getHullObjects().stream() + .mapToDouble(object::getDistance) + .sum() / node.getHullObjects().size(); + } + }; + + public abstract double getDistance(LocalAbstractObject object, Node node); }