Wir haben earstrip veröffentlicht, den Polygon-Triangulator unserer Kartenengine, als kleine Open-Source-Bibliothek unter der ISC-Lizenz, derselben Lizenz, die earcut verwendet. Sie besteht aus einem einzigen C++-Header und einem WebAssembly-Build, der auf npm veröffentlicht ist und dieselben Argumente wie earcut akzeptiert. In C++ läuft sie 14 % schneller als earcut.hpp, und im Browser ist sie 1,4- bis 2,1-mal so schnell wie earcut.js.
Eine GPU kann nur Dreiecke füllen, eine Karte besteht aber größtenteils aus Polygonen: Gebäude, Parks, Parkplätze und die Grasstreifen zwischen Straßenbahngleisen. Bevor ein Polygon gefüllt werden kann, muss sein Umriss in Dreiecke zerlegt werden. Unsere Offline-Karte der Woiwodschaft Masowien, der Region um Warschau, enthält auf Zoomstufe 13 3.740.425 Polygone. Auf einem Kern eines M4 Pro benötigte der eingeschränkte Delaunay-Triangulator unserer Engine 2,93 Sekunden, um sie alle zu verarbeiten.
Im Oktober haben wir ihn durch Ohrenschneiden ersetzt. Die Delaunay-Triangulierung vermeidet schmale Dreiecke und ist nützlich für Interpolation und Simulation, eine flache Füllung braucht diese Qualität jedoch nicht, und der größte Teil der Arbeit floss in einfache Formen. Fast die Hälfte der masowischen Polygone, 1,8 Millionen, hat vier Eckpunkte oder weniger, dennoch verbrachte der Delaunay-Code 419 ms damit, ihre Triangulierungen von Grund auf zu erstellen. Ohrenschneiden entfernt jeweils eine Ecke, und jedes einfache Polygon mit mehr als drei Eckpunkten hat mindestens zwei sich nicht überlappende Ohren, sodass immer ein weiterer Schnitt möglich ist.
Um die Arbeit zu dokumentieren, haben wir den Ohrenschneider mit einer Idee pro Commit neu aufgebaut und jeden Schritt an denselben 3,7 Millionen Polygonen gemessen. Die finale Version verarbeitet den gesamten Datensatz in 489 ms, das ist die Zahl in der Überschrift.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing