diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2026-05-01 20:40:08 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2026-05-03 21:15:57 +0800 |
| commit | fb15536326a8d5b3187981b0036df65f4bb60996 (patch) | |
| tree | 49f3beec2e9db248bda798009ab035ed8f898a2f /_log/2d-geometry-kernel.md | |
| parent | 76ae41e3cb961183a98813d593a76e5f5154aad7 (diff) | |
| download | www-fb15536326a8d5b3187981b0036df65f4bb60996.tar.gz | |
Geometry engine post.
Diffstat (limited to '_log/2d-geometry-kernel.md')
| -rw-r--r-- | _log/2d-geometry-kernel.md | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/_log/2d-geometry-kernel.md b/_log/2d-geometry-kernel.md new file mode 100644 index 0000000..0c47554 --- /dev/null +++ b/_log/2d-geometry-kernel.md @@ -0,0 +1,37 @@ +--- +title: Built a geometry kernel for building design +date: 2022-07-31 +layout: post +--- + +Written in 2026, backdated to 2022. + +Joined the real estate firm mid-migration (C# to Java). The Java building +design system lacked a geometry kernel; project had stalled. + +Small geometries (hundreds of points)—mostly 2D. No frame budget or low-latency +requirements. Architects and structural engineers supplied the test cases. +Numerical parity with Rhino 3D was mandatory. + +Implemented polygon clipping with Sutherland–Hodgman. No drama. + +Polygon offsets had always been problematic. Architects flagged two Z and +H-shaped floor plans where offsets produced self-intersections that tripped +Rhino 3D. Instead of straight skeletons, implemented a custom solver that fixed +invalid loops by backtracking. + +Fortune's algorithm for Voronoi diagrams was a missed opportunity. Implemented +the beach line with an array (O(N<sup>2</sup>)). Didn't pursue the balanced +binary tree (O(N log N))—ran out of time. + +Finding the largest inscribed rectangle was messier; no solution covered both +convex and concave polygons. Found a paper on the convex case but couldn't +bridge the gap from theory to implementation. Fell back to a brute-force grid +search: 12% gain over the existing approach, but not the true optimum. + +Rhino 3D's geometry model was numerically incompatible with Apache Commons' +Binary Space Partitioning—intersections didn't match. Replaced BSP trees with +point-based structures. JBLAS stabilized intersection results between systems. + +Migration resumed. No regressions in the building layouts. + |
