From 848ddb5f2b545c4364af5a08ea7f5627a5e147ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev> Date: Sun, 28 Feb 2021 18:29:34 +0100 Subject: [PATCH] FIX: object-node distance type now owns the distance computation --- src/mhtree/ObjectToNodeDistance.java | 33 +++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/mhtree/ObjectToNodeDistance.java b/src/mhtree/ObjectToNodeDistance.java index f9430f2..734a72c 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); } -- GitLab