GEOMETRY-110: add ConvexHull3D using Quickhull algorithm

* GEOMETRY-110

Add ConvexHull3D class and tests.

* GEOMETRY-110

Return only an unmodifiable collection of facets.

* GEOMETRY-110

Test for a large number of points.

* Checkstyle Fix.

* GEOMETRY-110

Points are added to candidates again instead of a new point set.

* GEOMETRY-110

Only candidates points are distributed.

* GEOMETRY-110

Add Simplex type

* GEOMETRY-110

Create simplex while appending and cache it for later.

* GEOMETRY-110

Build simplex incrementially while appending points.

* GEOMETRY-110

Return facets as list and filter out duplicates in vertices.

* GEOMETRY-110

Returned collections have to be unmodifiable in public methods.

* GEOMETRY-110

Rename method and calculate maximum in a loop.

* GEOMETRY-110

Declare variable outside of loop.

* GEOMETRY-110

Rename methods.

* GEOMETRY-110

Replace bounds by array.

* GEOMETRY-110

Add check for appending a collection of points

* [GEOMETRY-110]

Delete hasOusidePoints and add exclusion for facets to spotbugs.

* [GEOMETRY-110]

Move isInside method into Facet class and reverse and rename it to isOutside

* [GEOMETRY-110]

Replace vertexToFacetMap with edgeMap

* [Geometry-110]

Change loop for creating edges.

* [GEOMETRY-110]

Facets are all located through edge operations. The edges are oriented in such a way, that neighbors share an edge in inverse orientation.

* [GEOMETRY-110]

Delete unnecessary debug code.

* [GEOMETRY-110]

Edges are oriented and lookup is done via an edgeMap. Each oriented edge is unique in association with a facet. Each facet stores the maximum offset and the associated point of outside points.

* [GEOMETRY-110]

- Rename Edge fields.
- Improve testing and assert all outputs of the algorithm.

* [GEOMETRY-110]

Check isDegenerate for all non-degenerate hulls.

* [GEOMETRY-110]

Even though the defined region is the same the number of facets can vary depending on the execution order of the algorithm.

---------

Co-authored-by: agoß <agoß@Goß>
Co-authored-by: Andreas Goss <agoss@itemis.com>
4 files changed
tree: fd700b6f488cde5e6edf114a7b9beff79a411739
  1. .github/
  2. commons-geometry-core/
  3. commons-geometry-enclosing/
  4. commons-geometry-euclidean/
  5. commons-geometry-examples/
  6. commons-geometry-io-core/
  7. commons-geometry-io-euclidean/
  8. commons-geometry-spherical/
  9. dist-archive/
  10. doc/
  11. src/
  12. .asf.yaml
  13. .gitattributes
  14. .gitignore
  15. CODE_OF_CONDUCT.md
  16. CONTRIBUTING.md
  17. LICENSE
  18. NOTICE
  19. pom.xml
  20. README.md
  21. RELEASE-NOTES.txt
  22. SECURITY.md
README.md

Apache Commons Geometry

Build Status Coverage Status Quality Gate Status

Code Quality: Java License

The Apache Commons Geometry project provides geometric types and utilities.

Documentation

More information can be found on the Apache Commons Geometry homepage. The JavaDoc can be browsed. Questions related to the usage of Apache Commons Geometry should be posted to the user mailing list.

Where can I get the latest release?

You can download source and binaries from our download page.

Alternatively, you can pull it from the central Maven repositories:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-geometry</artifactId>
  <version>1.0</version>
</dependency>

Contributing

We accept Pull Requests via GitHub. The developer mailing list is the main channel of communication for contributors. There are some guidelines which will make applying PRs easier for us:

  • No tabs! Please use spaces for indentation.
  • Respect the code style.
  • Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
  • Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running mvn.

If you plan to contribute on a regular basis, please consider filing a contributor license agreement. You can learn more about contributing via GitHub in our contribution guidelines.

License

This code is under the Apache Licence v2.

See the NOTICE file for required notices and attributions.

Donations

You like Apache Commons Geometry? Then donate back to the ASF to support the development.

Additional Resources