blob: 5275ad8d050e1d355a4e9c90bfff7fb793e5c527 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
---
title: Geometry kernel for building design
date: 2022-07-31
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.
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.
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.
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.
Migration resumed.
|