From 9531e93efe86d2027f4bbec3aa9ea9bdfa693b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev> Date: Sun, 28 Feb 2021 18:36:59 +0100 Subject: [PATCH] FIX: node-node distance type now owns the distance computation --- src/mhtree/NodeToNodeDistance.java | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/mhtree/NodeToNodeDistance.java b/src/mhtree/NodeToNodeDistance.java index 391d9a1..762f1c5 100644 --- a/src/mhtree/NodeToNodeDistance.java +++ b/src/mhtree/NodeToNodeDistance.java @@ -1,6 +1,28 @@ package mhtree; +import messif.objects.LocalAbstractObject; + +import java.util.function.BiFunction; + public enum NodeToNodeDistance { - NEAREST_HULL_OBJECTS, - FURTHEST_HULL_OBJECTS, + NEAREST_HULL_OBJECTS(Math::min, Float.MAX_VALUE), + FURTHEST_HULL_OBJECTS(Math::max, Float.MIN_VALUE); + + private final BiFunction<Float, Float, Float> compareFunction; + private final float defaultValue; + + NodeToNodeDistance(final BiFunction<Float, Float, Float> compareFunction, final float defaultValue) { + this.compareFunction = compareFunction; + this.defaultValue = defaultValue; + } + + public float getDistance(Node node1, Node node2, BiFunction<LocalAbstractObject, LocalAbstractObject, Float> getDistance) { + float distance = defaultValue; + + for (LocalAbstractObject firstHullObject : node1.getHullObjects()) + for (LocalAbstractObject secondHullObject : node2.getHullObjects()) + distance = compareFunction.apply(distance, getDistance.apply(firstHullObject, secondHullObject)); + + return distance; + } } -- GitLab