Skip to content

Commit

Permalink
Update README and CHANGELOG
Browse files Browse the repository at this point in the history
  • Loading branch information
attcs committed Feb 7, 2025
1 parent fe86a5c commit 0aea1ba
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

# Latest
Interface changes
* Exposing of Node's entities responsibility was moved to the Tree class

Performance improvements
* `CollisionDetection()` (between different trees)
* `RayIntersectedFirst()`
* `GetNearestNeighbors()`

Miscellaneous
* Automatic Benchmark is added

Bugfixes
* Minor bugfixes in `InsertWithRebalance()`

## 2025-01-19 v2.5
Interface changes
* `std::execution` is dropped from the interface. `bool IS_PARALLEL_EXEC` is used instead.
Expand Down
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,16 @@ What is Morton-Z space-filling curve? https://en.wikipedia.org/wiki/Z-order_curv
* If less element is collected in a node than the max element then the child node won't be created.
* The underlying container is a hash-table (`std::unordered_map`) under 16D, which only stores the id-s and the bounding box of the child nodes.
* Original geometry data is not stored, so any search function needs them as an input.
* Unit tests are attached. (Microsoft Unit Testing Framework for C++)
* Tested compilers: MSVC 2022, Clang 12.0.0, GCC 11.3
* Tested compilers: MSVC 2022, Clang 12.0.0, GCC 11.3, AppleClang 16.0.0

## Recommendations
* If the geometrical entities are already available, build the tree using the Constructor or Create, rather than entity-wise Insertions. This can result in a significant performance gain.
* For tree building, `InsertWithRebalancing()` offers much better performance than Insert() with leaf-node settings.
* If the box tree is used only for collision detection, set `SPLIT_DEPTH_INCREASEMENT = 0` (`OctreeBox` uses 2 by default). Both creation and collision detection will be significantly faster.
* For `Pick`/`Range`/`Ray`/`Plane` related search, the default `SPLIT_DEPTH_INCREASEMENT = 2` is recommended.
* If the overall modeling space size changes dynamically, this tool cannot be applied directly. However, you can combine it with sparse grid-based spatial partitioning, where each cell contains an `Orthotree`.
* After calling `Init()`, the max depth cannot be changed, and the tree cannot be deepened further.
* See the **BENCHMARKS** page for performance-related graphs.

## Attached adapters
* Default: 2D, 3D...63D; `std::array` based structures (`PointND`, `VectorND`, `BoundingBoxND`, `RayND`, `PlaneND`)
Expand Down

1 comment on commit 0aea1ba

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'C++ Benchmark'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 0aea1ba Previous: ec63347 Ratio
Benchmarks::Box::Update<2>/50 0.05689734365408255 ms/iter 0.015169385804668567 ms/iter 3.75
Benchmarks::Box::Update<2>/100 0.0943226108000033 ms/iter 0.04456507024493247 ms/iter 2.12

This comment was automatically generated by workflow using github-action-benchmark.

CC: @attcs

Please sign in to comment.