summaryrefslogtreecommitdiffstats
path: root/_log/2d-geometry-kernel.md
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2026-07-25 16:48:16 +0800
committerSadeep Madurange <sadeep@asciimx.com>2026-08-13 22:51:43 +0800
commit10316f4c8259c65edf49462bc0e2a76011577e1c (patch)
treeee3e0e51d452326ae733520393900ff8abba0a27 /_log/2d-geometry-kernel.md
parent61568cd8d254b794188352354902acd85bdc4739 (diff)
downloadwww-10316f4c8259c65edf49462bc0e2a76011577e1c.tar.gz
Add reference to Domsson's fakesteak and minor tweaks to articles.minimalist
Diffstat (limited to '_log/2d-geometry-kernel.md')
-rw-r--r--_log/2d-geometry-kernel.md27
1 files changed, 11 insertions, 16 deletions
diff --git a/_log/2d-geometry-kernel.md b/_log/2d-geometry-kernel.md
index 5275ad8..2fc685a 100644
--- a/_log/2d-geometry-kernel.md
+++ b/_log/2d-geometry-kernel.md
@@ -6,29 +6,24 @@ layout: post
Written in 2026, backdated to 2022.
-Joined real estate firm mid-migration from C# to Java. Lacking a geometry
-kernel, the project had stalled.
-
+Real estate firm decided to rewrite the building design system from C# to Java.
Building geometries are small—mostly 2D. No frame budgets or low-latency
constraints. Numerical parity with Rhino was mandatory. Architects and
-structural engineers supplied test cases and tolerances.
+structural engineers supplied test cases and floating-point tolerances.
Implemented polygon clipping with Sutherland–Hodgman. No drama.
Fortune's algorithm was a missed opportunity. Implemented the beach line using
-a linear list instead of the balanced binary tree. Planned to return to this.
-Never had the chance.
+a linear list instead of the balanced binary tree. Planned to return to this;
+never had the chance.
Z and H-shaped floor plan offsets produced self-intersections that even Rhino
-mishandled. Couldn't implement straight skeletons under time pressure. Wrote a
-custom solver that fixed invalid loops by backtracking instead.
-
-Problem of finding the largest inscribed rectangle surprised me. No single
-algorithm covered both convex and concave shapes. Brute-force grid search
-yielded 12% more buildable area—but not the true optimum.
-
-Java BSP library produced results numerically incompatible with Rhino's.
-Replaced BSP trees with vector-based primitives and JBLAS.
+mishandled. Could not get straight skeletons working under time pressure. Wrote
+a custom solver that fixed invalid loops by backtracking instead.
-Migration resumed.
+Problem of finding the largest inscribed rectangle was surprisingly difficult.
+No single algorithm covered both convex and concave shapes. Brute-force grid
+search yielded 12% more buildable area—but not the true optimum.
+Java BSP library proved numerically incompatible with Rhino. Replaced BSP trees
+with vector-based primitives and JBLAS instead.