| <?xml version="1.0"?> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <document> |
| |
| <properties> |
| <title>Commons Geometry</title> |
| </properties> |
| |
| <body> |
| |
| <section name="Apache Commons Geometry" href="summary"> |
| <p> |
| Commons Geometry provides types and utilities for geometric processing. Key features include |
| </p> |
| <ul> |
| <li>Support for Euclidean space in 1, 2, and 3 dimensions</li> |
| <li>Support for spherical space in 1 and 2 dimensions</li> |
| <li>Support for geometric elements of infinite size</li> |
| <li>Support for boolean operations on regions (union, intersection, difference, xor)</li> |
| <li>Single external dependency (<a href="https://commons.apache.org/proper/commons-numbers/" |
| >commons-numbers</a>)</li> |
| </ul> |
| |
| <p>The code below gives a small sample of the API by computing the difference of cube and an approximation |
| of a sphere. See the <a href="userguide/index.html">user guide</a> for more details. |
| </p> |
| <source class="prettyprint"> |
| // construct a precision context to handle floating-point comparisons |
| DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-6); |
| |
| // create a BSP tree representing the unit cube |
| RegionBSPTree3D tree = Parallelepiped.unitCube(precision).toTree(); |
| |
| // create a sphere centered on the origin |
| Sphere sphere = Sphere.from(Vector3D.ZERO, 0.65, precision); |
| |
| // subtract a BSP tree approximation of the sphere containing 512 facets |
| // from the cube, modifying the cube tree in place |
| tree.difference(sphere.toTree(3)); |
| |
| // compute some properties of the resulting region |
| double size = tree.getSize(); // 0.11509505362599505 |
| Vector3D centroid = tree.getCentroid(); // (0, 0, 0) |
| |
| // convert to a triangle mesh for output to other programs |
| TriangleMesh mesh = tree.toTriangleMesh(precision); |
| </source> |
| <p>Below is an image of the triangle mesh rendered with |
| <a href="https://www.blender.org/" target="_blank">Blender</a>. The mesh was written as an OBJ file using the code in |
| <a href="commons-geometry-examples/commons-geometry-examples-io/apidocs/index.html"><em>commons-geometry-examples-io</em></a>. |
| </p> |
| <img src="images/cube-minus-sphere.png" /> |
| |
| </section> |
| |
| <section name="Download Apache Commons Geometry"> |
| <subsection name="Releases"> |
| <p> |
| Download the |
| <a href="https://commons.apache.org/geometry/download_geometry.cgi"> |
| latest release</a> of Apache Commons Geometry. |
| </p> |
| </subsection> |
| </section> |
| |
| </body> |
| |
| </document> |