You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Matt Juntunen (Jira)" <ji...@apache.org> on 2022/02/12 21:46:00 UTC
[jira] [Commented] (GEOMETRY-142) Point Set/Map
[ https://issues.apache.org/jira/browse/GEOMETRY-142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17491454#comment-17491454 ]
Matt Juntunen commented on GEOMETRY-142:
----------------------------------------
I just completed initial implementations of the {{PointMap}} interface for Euclidean 1D, 2D, and 3D and pushed them to my working branch (https://github.com/darkma773r/commons-geometry/tree/point-map). In order to completely hide the implementation details, I created dimension-specific interfaces with factory methods that return instances of a package-private class. For example, this is how you create a 3D point map in the current code:
{code:java}
Precision.DoubleEquivalence precision = Precision.doubleEquivalenceOfEpsilon(1e-6);
// PointMap3D is an interface; the returned instance is of the package-private class PointMap3DImpl
PointMap3D map = PointMap3D.of(precision);
{code}
I'm not totally sure of this design. It seems kind of odd to have a factory method on an interface and I feel like the factory method name "of" isn't quite right. However, I know that the map implementation will most likely undergo optimizations and so needs to isolated from the public API.
In terms of the implementations, the 1D point map uses a JDK {{TreeMap}} internally while the 2D and 3D maps use a base class that implements the quadtree/octree approach that was the winner of the algorithm performance tests.
Feedback is welcome. I'm picturing the next step to be implementing maps for spherical 1D and 2D. I won't be able to use the same algorithms there as for Euclidean. I'm thinking a modified {{TreeMap}} for 1D and a BSP-based data structure for 2D.
> Point Set/Map
> -------------
>
> Key: GEOMETRY-142
> URL: https://issues.apache.org/jira/browse/GEOMETRY-142
> Project: Apache Commons Geometry
> Issue Type: New Feature
> Reporter: Matt Juntunen
> Assignee: Matt Juntunen
> Priority: Major
> Fix For: 1.1
>
>
> It would be very useful to have set and map implementations that accepts points and vectors as keys and use "fuzzy" look up logic, where values are compared using a precision context. This would have uses in a number of situations, including the implementation of GEOMETRY-110.
> Options for the implementation of such classes include
> * BSP trees (as already implemented)
> * k-d trees
> * quadtrees/octrees
> * r-trees
--
This message was sent by Atlassian Jira
(v8.20.1#820001)