We should probably create `PolygonError` and throw those instead. That seems more elegant (and easier to catch polygon errors).