Commit Graph

14 Commits

Author SHA1 Message Date
Ellen Emilia Anna Zscheile d3dc826be4 feat: Implement TopoNavmesh DualOuter-DualOuter extraction
This also fixes a sign bug in LineIntersection calculation
2025-06-27 15:15:26 +02:00
Ellen Emilia Anna Zscheile a561b278fc feat(router/ng/router): Implementation of the topological router
- feat(autorouter): Prepare for population of planar Topo-Navmesh with existing routes
  See also issue #166.
- feat(topola-egui): Add dialog for topological navmesh layer selection
- feat(router/ng/eval): Optionally restrict set of allowed TopoNavmesh edges
- fix(router/ng/eval): Use poly_ext_handover
2025-06-27 15:15:24 +02:00
Ellen Emilia Anna Zscheile 03d85b8566 feat(math/polygon_tangents): Implement polygon handover
Fixes #240
2025-06-12 23:33:30 +02:00
Ellen Emilia Anna Zscheile cfd20ed381 feat: Implement line (segment) intersection check 2025-06-11 16:37:57 +02:00
Ellen Emilia Anna Zscheile ee19ae934f fix(drawing/bend): Improve handling of almost equal points in perp_dot_product 2025-05-20 00:13:07 +02:00
Ellen Emilia Anna Zscheile 46d3d0e4a0 feat(math): add cached variant of polygonal tangent calculation 2025-05-01 15:28:20 +02:00
Ellen Emilia Anna Zscheile 7799c50829 feat(math): implement search for boundaries of partitions in cyclic partitioned lists.
e.g. find the bounds of false, true in [false, true, true, false, false]
under the condition that the blocks in partitions of a single value are connected,
meaning when considering the list as cyclic, there are at most 2 blocks (for value true, false).
This implements only the binary case.

Exponential search was suggested by Harold Aptroot <@harold@mastodon.gamedev.place>

Example/motivating use case: detecting which parts of the exterior of a Polygon
  face towards a point, and which parts don't, in particular finding the (extremal) points
  contained in the tangents. This use case is implemented in `poly_ext_tangent_points`.

Signed-off-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-05-01 15:28:20 +02:00
Mikolaj Wielgus b000f2b7d8 refactor(math): Replace `cw` booleans with `RotationSense` enums
The term "cw" (clockwise) was somewhat cryptic, using a more verbose
term improves readability.
2025-04-29 13:58:49 +02:00
Mikolaj Wielgus 368caa268f docs(math): add some function docstrings 2025-04-25 02:16:10 +02:00
Ellen Emilia Anna Zscheile bb86aaed2a minimal backend for `planar-brute-embed` topological navmesh generation (#161)
Reviewed-on: https://codeberg.org/topola/topola/pulls/161
Co-authored-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-02-15 00:00:15 +00:00
Ellen Emilia Anna Zscheile 3201df50bd Revert "feat(math): introduce dedicated data type for normalized angles"
This reverts commit b4fe7006b7.

The reverted commit introduced an autorouter regression, observable
in 4x_3rd_order_smd_lc_filters test using egui (see Matrix chat).
2025-01-09 01:05:23 +01:00
Alain Emilia Anna Zscheile 344d892ae0 chore,docs(math): rename 'cross_product' to 'perp_dot_product', add some documentation 2025-01-08 16:19:24 +00:00
Alain Emilia Anna Zscheile b4fe7006b7 feat(math): introduce dedicated data type for normalized angles 2025-01-08 16:19:24 +00:00
Alain Emilia Anna Zscheile 4529ac1ba3 refactor(math): put tangents stuff into separate module 2025-01-08 16:19:24 +00:00