--- 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 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. 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(N2)). 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 uses points, vectors, planes, and linear algebra (via BLAS). Java system used Binary Space Partitioning. The two were numerically incompatible. Replaced BSP trees with vector-based structures. JBLAS aligned the linear algebra with Rhino's. Migration resumed. No regressions in the building layouts.