#+STARTUP: showeverything
* Changelog
** 0.14
- Allow the associated/extra data of linesegments and intervals to
differ when testing for intersections.
- Intersection testing between line segments and rectangles
- Testing if lines and/or line segments intersect no longer requires a
Fractional constraint; Num is sufficient. However, in turn we now do
need Ord rather than just Eq. That seemed a worthwile tradeoff though.
- Cleaning up the public API by hiding several internal modules.
- Introduced the 'HasSquaredEuclideanDistance' class describing
geometry types for which we can compute the squared distance from a
point to a geometry, and added instances for some of the basic
geometries.
- Fixed a bug in computing lengths to open line segments.
- Removed some proxy arguments, in e.g. Data.Geometry.Point.coord,
rather than take a Proxy to specify which coordinate we want, use
type applications.
- Support for GHC 9.0 and 9.2
- Better support for open-ended line segments in the Bentley Ottmann
line segment intersection algorithm.
** 0.13
- Moved 'intersects' from the HasIntersectionWith class into a new
class IsIntersectableWith. This allows separate (weaker) constraints
for checking *if* geometries intersect rather than computing exact
intersections.
- New BezierSpline features.
- "Zoom to fit" transformation.
- Many fixes related to PlaneGraph/PlanarSubdivison; i.e. bugs in
which order the vertices/darts where reported when traversing a
face. The polygon representing the outer boundary now is some area
inside a bounding polygon.
- Fixed a bug in the DelaunayTriangulation.
- Preliminary implementations for updating planar subdivisions
(e.g. subdividing edges).
** 0.12
- New website: https://hgeometry.org/
- Switch polygon implementation from a circular seq to a circular vector.
- Hide polygon implementation details.
- Enforce CCW polygon order by default.
- Fix bug in Data.Geometry.Polygon.Convex.extremes/maxInDirection.
- Fix bug in pointInPolygon in case of degenerate situations.
- Fix Read/Show instances for Point and Polygon such that 'read.show = id'.
- Improved numerical robustness.
- Random generation of monotone polygons. Thanks to @1ndy.
- Random and uniform generation of convex polygons.
- More IsIntersectableWith instances
- Updated Show/Read instances for LineSegments
- New algorithm: Visibility polygon in O(n log n) time.
- New algorithm: Earclip triangulation in O(n^2) time worst case, O(n)
time expected case.
- New algorithm: Single-source shortest path in O(n) time.
- New algorithm: Planar point locator in O(log n) time.
- New algorithm: Point set diameter in O(n log n) time.
- New algorithm: Convex hull of a polygon in O(n) time.
- New algorithm: Diameter of a convex polygon in O(n) time.
- New algorithm: Check if a point lies inside a convex polygon in O(n)
time.
- New algorithm: Discrete Frechet distance in O(n^2) time.
** 0.11
- Removed Functor instance from Triangle and replaced it with Bifunctor/Bifoldable/Bitraversable
- Testing if a point lies above/below a line is now in a typeclass,
moreover there now is also an instance of this typeclass for
planes. Hence, we can test if a point in R^3 lies above or below a
plane.
- Bugfixes in the incomingEdges and outgoingEdges functions in
Planar/Plane graphs and Planar subdivisions
- Added separate data types for Sides and Corners of Rectangles.
- More functionality for working with Halfspaces
- Fixed a bug in computing the intersection of overlapping
linesegments
- PolyLine.fromPoints now returns a Maybe PolyLine rather than a
Polyine. Use fromPointsUnsafe for the old behavior.
- Interval now no longer exports its constructor. Use the provided
patterns instead.
- Added an OpenLineSegment pattern/constructor
- The corners and sides functions in Box now return specific types
representing those rather than four tuples.
- Added a BezierSpline module and data type (Thanks to Maarten).
- Added a QuadTree implementation. It can be built from a set of
points, and to represent the zeroset of some function.
- Added a Naive implementation of Convex hull in R^3. Note however
that it works only for points in general position. In particular, no
four points should be coplanar.
- Added a Data.Geometry.Directions module that defines cardinal and
InterCardinal directions.
- Added an Ellipse type (mostly so that hgeometry-ipe can read
ellipses)
- Added FunctorWithIndex, FoldableWithIndex, and TraversableWithIndex
instances for Vector, and removed specifically exporting imap; we
can now just use those functions from the Lens package.
** 0.10
- renamed the smallest enclosing ball to RIC
- improved tangency finding on convex hulls/chains
- changes to how we order points in ccwCmpAround and cwCmpAround;
these will report EQ if points appear at the same angle from the
center point.
- new functions ccwCmpAroundWith and cwCmpAroundWith that allow you to
specify the direction corresponding to "zero".
- bugfixes, in particular triangulating a polygon with holes now works properly.
- removed some unused dependencies
- we are no longer depending on ghc-plugins; as a result hgeometry
now also compiles with ghcjs
- more ToJSON/FromJSON instances.
- removed the 'point2' and 'point3' functions in favor of the pattern
synonyms Point2 and Point3.
** 0.9
- Implemented 2D Linear Programming using randomized incremental
construction (in \(O(n)\) expected time). This allows us to solve
the following problems
- testing starshapedness of simple polygons in expected linear time
- testing if we can separate a set of red and a set of blue points
in expected linear time.
- Data types for halfspaces
** 0.8
- Compatibility with GHC 8.6
- Added \(O(n\log n)\) time closest pair algorithm.
- Added arrangement data type
- Various Bugfixes
- Added Camera data type with some world to screen transformations.
- Additional read/show instances
- Updated some of the show instances for Ipe related types.
** 0.7
- Compatibility with GHC 8.0-8.4
- Implemented more Algorithms and Data Structures. This includes
* Polygon triangulation
- A new implementation of PlanarSubdivision that now also supports disconnected
subdivsions.
- Performance improvements by changing to a different Vector
implementation. For low dimensional vectors (of dimension at most four) we
now essentially use the types from
[linear](https://hackage.haskell.org/package/linear), this gives significant
speedups on several small benchmarks.
- bugfixes.
** 0.6
- Implemented more Algorithms and Data Structures. This includes
* Bentley-Ottmannn line-segment intersection,
* Well-Separated Pair decompositions,
* extremal point/tangents for Convex hulls,
* Minkowski sum for convex polygons,
* one dimensional segment trees,
* one dimensional interval trees, and a
* KD-tree.
- Several bug fixes, including a very stupid bug in Box
- Separate ConvexPolygon type.
- More thorough testing for some of the algorithms.
- Started work on a proper representation for planar subdivsions. This includes
a representation of planar graphs that support querying if two vertices are
connected by an edge in $O(1)$ time.
- Dropped support for GHC 7.8
** 0.5
- Implemented several algorithms, including Delaunay Triangulation, EMST, and
Douglas Peucker.
- Revamped the data types for Intersections
** 0.
- Major rewrite from scratch, providing much stronger type-level
guarantees. Incompatible with older versions.
- Convex Hull and Smallest enclosing disk algorithms.
- HGeometry now includes some very experimental and preliminary support for
reading and writing Ipe7 files.
** 0.2 & 0.3
- Internal releases.
** 0.1.1
- Fixed a bug in point on n the line segment test
- Generalized the types of inCircle, inDisc, onCircle, onDisc etc. We now need
only that the type representing precision model implements the typeclass
`Num` instead of `Floating'.
** 0.1
- Initial release.