Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
3ca3903
Update README.md
micycle1 Feb 8, 2024
38ac937
Merge branch 'dev' of https://github.com/micycle1/PGS into dev
micycle1 Jan 19, 2025
e5865ca
reimplement cornerrounding
micycle1 Jan 25, 2025
00dfd76
add LR Smoothing
micycle1 Jan 26, 2025
c7cd526
speed up tangency pack (swap set for array, scale precision on input …
micycle1 Jan 26, 2025
df83ba0
tangencyPack() further speed up
micycle1 Jan 26, 2025
add5e03
mwvd small speedup
micycle1 Jan 27, 2025
6654ab0
roundVertexCoords() now returns a copy
micycle1 Feb 1, 2025
75636c3
always determinisic toDualGraph()
micycle1 Feb 1, 2025
c4001ab
assorted
micycle1 Feb 1, 2025
6d44149
add interiorAngles()
micycle1 Feb 2, 2025
e401bf8
fix elongation()
micycle1 Feb 9, 2025
fc133d1
better short-circuiting for intersectMesh()
micycle1 Feb 9, 2025
2021ace
toGraph() accept LINES shapes
micycle1 Feb 9, 2025
256dac5
add forEachShape()
micycle1 Feb 9, 2025
7418f52
fix urquhartFaces() for unconstrained tins
micycle1 Feb 9, 2025
5dca3ee
add maximumInscribedTriangle()
micycle1 Feb 10, 2025
5b7df15
improve MIR
micycle1 Feb 11, 2025
be756ff
add closestPoint()
micycle1 Feb 11, 2025
9296ca3
add distanceTree()
micycle1 Feb 11, 2025
0c4c38d
isClockwise (without mutation)
micycle1 Feb 11, 2025
4dfda5f
Merge branch 'dev' of https://github.com/micycle1/PGS into dev
micycle1 Feb 11, 2025
2de71c9
pom
micycle1 Feb 11, 2025
ccafb84
adjust skeleton selection (remove kendzi)
micycle1 Feb 11, 2025
9d1338a
images
micycle1 Feb 14, 2025
667b466
assorted
micycle1 Feb 14, 2025
79f98f6
add matchingQuadrangulation()
micycle1 Feb 16, 2025
0a51f1f
assorted
micycle1 Feb 16, 2025
748f6e4
add filterNear()
micycle1 May 3, 2025
2deb7c4
assorted small
micycle1 May 3, 2025
5132dbd
MIC auto tolerance
micycle1 May 10, 2025
f1f2627
smarter adaptive quadSegs for buffer()
micycle1 May 18, 2025
f1c1c5a
add spiralSort()
micycle1 May 18, 2025
1133ae1
add unionLines()
micycle1 May 19, 2025
7a189b7
assorted
micycle1 May 19, 2025
4f9757a
no message
micycle1 May 19, 2025
7272bbb
optimise RLF
micycle1 May 23, 2025
0d5b110
add generateAnnularBricks()
micycle1 May 23, 2025
4fba484
improve findShortestTour()
micycle1 May 24, 2025
7c41b23
clean intersectMesh() code
micycle1 May 25, 2025
fc0187d
mutable forEachShape() output
micycle1 May 25, 2025
34a2cec
add overlapRegions()
micycle1 May 26, 2025
9f3ec1d
add normalise()
micycle1 May 31, 2025
6b3232b
overlap regions faster
micycle1 May 31, 2025
79855ce
recode gaussian line smoothing
micycle1 May 31, 2025
e6282aa
add boundingBox()
micycle1 May 31, 2025
5c34c7b
add farthestPointVoronoi()
micycle1 May 31, 2025
6b1a71d
assorted
micycle1 Jun 2, 2025
9620b77
add farthestPoint/Vertex()
micycle1 Jun 2, 2025
4689bbc
FPVD - encode circumcircle data
micycle1 Jun 2, 2025
54efa55
small change to extractInnerEdges()
micycle1 Jun 2, 2025
a19ad48
add intersections() and minimumWidthAnnulus()
micycle1 Jun 8, 2025
f20469b
fpvd no-bounds constructor
micycle1 Jun 8, 2025
a5b51f6
maximumInscribedCircle() & minimumBoundingCircle() w/ out args
micycle1 Jun 8, 2025
4fd208c
add rect() (and other javadocs)
micycle1 Jun 8, 2025
93a51fe
update pom. fix dependencies
micycle1 Jun 9, 2025
154e59d
pom
micycle1 Jun 9, 2025
35c9b41
pom - restore jts snapshot now that its fixed
micycle1 Jun 9, 2025
1dd4511
fixup gaussianLineSmooth
micycle1 Jun 9, 2025
68c7898
new tinfour api
micycle1 Jun 16, 2025
4db2cd3
assorted small
micycle1 Jun 16, 2025
2b49f1e
add areaMerge(, int)
micycle1 Jun 16, 2025
a72c6a0
minimumInteriorAngle()
micycle1 Jun 18, 2025
2f75ebd
varied PGS_Contour additions
micycle1 Jun 30, 2025
1df0555
add arc+slice division
micycle1 Jun 30, 2025
a98c187
no message
micycle1 Jun 30, 2025
9ec523f
update betterbeziers and hobbycurves (faster hobby curves)
micycle1 Jul 1, 2025
52eaf39
assorted small
micycle1 Jul 5, 2025
ba7c466
nest work on multipolygons
micycle1 Jul 14, 2025
660b88b
add centroid sort
micycle1 Jul 14, 2025
4543104
speedup maximumPerimeterSquare()
micycle1 Jul 14, 2025
38ee874
pointsOnExterior with startOffset arg
micycle1 Jul 15, 2025
c67fa90
add ypstripes locator.
micycle1 Jul 17, 2025
91c8cb8
add radialSortFaces()
micycle1 Jul 17, 2025
f1163c7
add centroidSplit()
micycle1 Jul 17, 2025
254a7b1
geoblitz
micycle1 Sep 14, 2025
e2a67ea
split point sampling into standalone class
micycle1 Sep 14, 2025
c15a469
assorted small
micycle1 Sep 14, 2025
afe50b6
unionLines varargs
micycle1 Sep 14, 2025
6412b2b
add createHobbyCurve()
micycle1 Sep 14, 2025
4f2c714
Improve GaussianLineSmoothing
micycle1 Sep 14, 2025
8b40072
faster LEC
micycle1 Sep 15, 2025
2b386a6
small
micycle1 Sep 15, 2025
2ae123b
add buffer cap style arg
micycle1 Sep 15, 2025
0f1eb61
squareGrid() inclusive
micycle1 Sep 19, 2025
a43eb7b
add pruneRandomToN() and pruneRandomRemoveN()
micycle1 Sep 20, 2025
348ceae
voronoi small speedup
micycle1 Sep 20, 2025
3fdbcce
add convexMaximumInscribedCircle()
micycle1 Sep 20, 2025
57b6ed9
add palette
micycle1 Sep 21, 2025
a75b76a
improve touchScale()
micycle1 Sep 23, 2025
196f6d1
DCE - don't fail on empty input
micycle1 Sep 23, 2025
a26a602
fixup rect+triSubdivision seeding
micycle1 Sep 23, 2025
ec9931e
triangleSubdivision both diagonals
micycle1 Sep 23, 2025
5c25092
small fix on hobby etc
micycle1 Sep 27, 2025
9683c11
improve applyToLinealGeometries()
micycle1 Sep 28, 2025
24320df
points and segments on all elements
micycle1 Sep 28, 2025
14d05fe
fixup and add more examples
micycle1 Sep 29, 2025
8277b4a
support all lineal elements in many pgs morph methods.
micycle1 Sep 29, 2025
3b1bd26
assorted small
micycle1 Sep 29, 2025
f8fb9d8
add dissolve()
micycle1 Sep 29, 2025
d218b75
add blobbies example
micycle1 Oct 4, 2025
00b563f
rect spiral double args
micycle1 Oct 4, 2025
3f506b9
remove dyn4j dependency
micycle1 Oct 4, 2025
dfc7156
pom @ 2.1
micycle1 Oct 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,79 @@ All notable changes to PGS will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Dates are *YYYY-MM-DD*.

## **2.1** *(2025-xx-xx)*

### Added
* `smoothLaneRiesenfeld` to `PGS_Morphology`. Smooths a shape using Lane-Riesenfeld curve subdivision with 4-point refinement to reduce contraction.
* New method signature for `PGS_Conversion.roundVertexCoords()` that accepts a number of decimal places.
* `interiorAngles()` to `PGS_ShapePredicates`. Calculates all interior angles of a polygon.
* `forEachShape()` and `forEachShapeWithIndex()`* to `PGS_Processing`. Applies a specified transformation function of a desired type `T` to each child of the given PShape, returning a list of `T` (*additionally with child's index).
* `maximumInscribedTriangle()` to `PGS_Optimisation`. Finds an approximate largest area triangle (of arbitrary orientation) contained within a polygon.
* `closestPoint()` to `PGS_Optimisation`. Finds the closest point in a collection of points to a specified point.
* `distanceTree()` to `PGS_Contour`. Generates a tree structure representing the shortest paths from a start point to all other vertices in a mesh.
* `vertexCount()` to `PGS_ShapePredicates`. Returns the total number of vertices that make up a shape.
* `matchingQuadrangulation()` to `PGS_Meshing`. Converts a triangulation into a quadrangulation, by pairing up triangles and merging them into high-quality quads.
* `filterNear()` to `PGS_SegmentSet`. Removes segments that are near others.
* `spiralSortFaces()` to `PGS_Optimisation`. Reorders the faces of a mesh into an anti-clockwise “spiral” (breadth-first rings) starting from a given face.
* `centroidSortFaces()` to `PGS_Optimisation`. Reorders the faces of a mesh by the x and then y coordinates of their centroids.
* `radialSortFaces()` to `PGS_Optimisation`. Sorts the faces of a mesh radially around a given centre.
* `unionLines()` to `PGS_ShapeBoolean`. Unions the linework of two shapes, creating polygonal faces from their intersecting lines.
* `closestVertex()` and `farthestVertex()` to `PGS_Optimisation`. Returns the closest/farthest vertex of a shape to a query point.
* `farthestPoint()` to `PGS_Optimsation`. Finds the farthest point in the collection from a specified point.
* `annularBricks()` to `PGS_Tiling`. Generates a geometric arrangement composed of annular-sector bricks arranged in concentric circular rings.
* `overlapRegions()` to `PGS_ShapeBoolean`. Finds the regions where at least two shapes overlap.
* `normalise()` to `PGS_Processing`. Normalises a shape by standardising its vertex ordering and orientation.
* `boundingBox()` to `PGS_Hull`. Calculates the axis-aligned bounding box (replaces `envelope()` in `PGS_Optimisation`.)
* `farthestPointVoronoi()` to `PGS_Voronoi`. Generates a farthest-point Voronoi diagram for a given set of sites and a bounding box.
* `intersections()` to `PGS_SegmentSet`. Computes all intersection points between two collections of line segments.
* `minimumWidthAnnulus()` to `PGS_Optimisation`. Computes the minimum-width annulus (ring) that encloses the vertices of a shape.
* Overloads of `minimumBoundingCircle()` and `maximumInscribedCircle()` that accept a PVector to output the circle center and radius.
* `createRect()` to `PGS_Construction`. Creates a rectangle with uniformly rounded corners
* New method signature for `PGS_Meshing.areaMerge()` that allows merging faces until the mesh contains exactly a user-specified number of faces.
* `minimumInteriorAngle()` to `PGS_ShapePredicates`. Computes the minimum interior angle of a shape.
* New method signature for `isolines()` having an intervals parameter that specifies the number of contour levels to generate.
* New method signature for `straightSkeleton()` that accepts an integer to control the number of nearest neighboring edges considered during collision detection.
* `contrastField()` to `PGS_Contour`. Generates vector contour lines representing a "contrast field" of a shape with respect to a given reference point.
* `arcDivision` to `PGS_Tiling`. Creates a cellular partition of the plane using arcs formed by circles seeded along its boundary.
* `sliceDivision` to `PGS_Tiling`. Divides the plane into randomly “sliced” polygonal regions.
* New method signature for `pointsOnExterior()` having a starting point offset parameter that specifies the distance along the perimeter to start sampling points.
* `centroidSplit()` to `PGS_Processing`. Splits the input shape into n wedge-shaped regions by connecting the centroid to points along the perimeter.
* `createHobbyCurve()` to `PGS_Construction`. Creates a Hobby curve from a set of control points.
* `pruneRandomRemoveN()` to `PGS_PointSet`. Randomly removes exactly N points from a list of points.
* `pruneRandomToN()` to `PGS_PointSet`. Randomly prunes a list of points to exactly N points.
* `convexMaximumInscribedCircle()` to `PGS_Optimisation`. Computes the largest inscribed circle of a convex polygon (faster and exact).

### Changes
* Optimised `PGS_CirclePacking.tangencyPack()`. It's now around 1.5-2x faster and has higher precision.
* `PGS_Conversion.roundVertexCoords()` now returns a rounded copy of the input (rather than mutating the input).
* Outputs from `PGS_Conversion.toDualGraph()` will now always iterate deterministically on inputs with the same geometry but having a different structure.
* `PGS_Contour.straightSkeleton()` now always uses a more robust approach (which has been sped up considerably too).
* Optimised `ColoringAlgorithm.RLF` (the speed increase grows with input size).
* Improved `PGS_PointSet.findShortestTour()` TSP algorithm. It now uses a more effective heuristic that finds shorter tours in less time.
* `PGS_Meshing.extractInnerEdges()` no longer dissolves edges in the output.
* `PGS_Morphology.simplifyHobby()` is much faster, particularly on shapes with many vertices.
* Optimised `PGS_Processing.maximumPerimeterSquare()`. It's about 2x faster.
* Varying `sigma` in `PGS_smoothGaussian()` no longer causes "wobblyness" in the output.
* New method signature for `PGS_Morphology.buffer()` that accepts a cap style parameter.
* `PGS_PointSet.squareGrid()` now populates the grid with points upto and including `xMax` and `yMax` (inclusive).
* Improved `PGS_Transformation.touchScale()` algorithm. It's now more performant and robust.
* `PGS_Tiling.triangleSubdivision()` can now begin from both diagonal axes, not just the top-left to bottom-right diagonal.
* `PGS_Processing.pointsOnExterior()` methods now return points on all elements of a shape, not just the perimeter of the first polygon.
* `PGS_Processing.segmentsOnExterior()` now return segments on all elements of a shape, not just the perimeter of the first polygon.
* These methods in `PGS_Morphology` now process any and all polygon/line elements in a shape: `chaikinCut()`, `smoothGaussian()`, `simplifyDCE()`, `simplifyHobby()`, `smoothEllipticFourier()`, `round()`.
* `dissolve()` to `PGS_Processing`. Dissolves the linear components of a shape into a set of unique maximal-length lines

### Fixed
* `PGS_Morphology.rounding()` no longer gives invalid results.
* `PGS_ShapePredicates.elongation()` now correctly measures shape elongation (previously inverted, now returns 1 for highly elongated shapes).
* `PGS_Conversion.toGraph()` now processes `LINES` shapes correctly.
* `PGS_Meshing.urquhartFaces()` no longer errors on triangulation inputs with no constraints.
* `PGS_Tiling.triangleSubdivision()` subdivision is now deterministic across `maxDepth` for a given seed.
* `PGS_Tiling.rectSubdivision()` subdivision is now deterministic across `maxDepth` for a given seed.
* `PGS_Morphology.pinchWarp()` now preserves closed polygon inputs.

### Removed

## **2.0** *(2025-01-11)*

**NOTE: Beginning at v2.0, PGS is built with Java 17.**
Expand Down
83 changes: 57 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Library functionality is split over the following classes:
* `PGS_Contour`
* Methods that produce various contours from shapes: medial axes, straight skeletons, offset curves, etc.
* `PGS_Conversion`
* Conversion between *Processing* PShapes and *JTS* Geometries (amongst other formats)
* Conversion between *Processing* PShapes and *JTS* Geometries (amongst other formats).
* `PGS_Hull`
* Convex and concave hulls of polygons and point sets.
* `PGS_Meshing`
Expand Down Expand Up @@ -74,6 +74,10 @@ PGS is hosted as an artifact for use in Maven or Gradle projects via [Jitpack](h
A number of example Processing sketches are provided in [examples](https://github.com/micycle1/PGS/tree/master/examples).

<p float="middle">
<a href="examples/organicSponge"><img src="resources/examples/organicSponge.png" alt="" width="24%"/></a>
<a href="examples/interlock"><img src="resources/examples/interlock.png" alt="" width="24%"/></a>
<a href="examples/warpedQuilt"><img src="resources/examples/warpedQuilt.png" alt="" width="24%"/></a>
<a href="examples/blobbies"><img src="resources/examples/blobbies.png" alt="" width="24%"/></a>
<a href="examples/partitionSmooth"><img src="resources/examples/partitionSmooth.png" alt="" width="24%"/></a>
<a href="examples/textOffsetCurves"><img src="resources/examples/textOffsetCurves.png" alt="" width="24%"/></a>
<a href="examples/ripplingTriangles"><img src="resources/examples/ripplingTriangles.png" alt="" width="24%"/></a>
Expand Down Expand Up @@ -112,6 +116,15 @@ Much of the functionality (but by no means all) is demonstrated below:
<td valign="top" width="25%"><img src="resources/boolean/intersectMesh.gif"></td>
<td valign="top" width="25%"><img src="resources/boolean/subtractMesh.gif"></td>
</tr>

<tr>
<td align="center" valign="center"><b>Union Lines</td>
<td align="center" valign="center"><b>Overlap Regions</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/boolean/unionLines.gif"></td>
<td valign="top" width="25%"><img src="resources/boolean/overlapRegions.gif"></td>
</tr>
</table>

## *Transformation*
Expand Down Expand Up @@ -172,23 +185,15 @@ Much of the functionality (but by no means all) is demonstrated below:


### Metrics
* Length/perimeter
* Width & Height
* Diameter
* Circularity
* Similarity
* Sphericity
* Elongation
* Density
* Holes
* Maximum interior angle
* Is simple?
* Is convex?
* Equal? (structural and topological equivalence)
* Distance
* Area
* Centroid
* Median

| <!-- --> | <!-- --> | <!-- --> |
|-------------|-------------|-------------|
| Length/perimeter | Similarity | Is simple? |
| Width & Height | Sphericity | Is convex? |
| Diameter | Elongation | Equal? (structural and topological equivalence) |
| Circularity | Density | Distance |
| Area | Holes | Centroid |
| Interior angles | Maximum interior angle | Median |

## *Contour*

Expand Down Expand Up @@ -228,10 +233,14 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Distance Field</td>
<td align="center" valign="center"><b>Center Line</td>
<td align="center" valign="center"><b>Distance Tree</td>
<td align="center" valign="center"><b>Contrast Field</td>
</tr>
<tr>
<td valign="top"><img src="resources/contour/distanceField.png"></td>
<td valign="top"><img src="resources/contour/centerLine.gif"></td>
<td valign="top"><img src="resources/contour/distanceTree.png"></td>
<td valign="top"><img src="resources/contour/contrastField.png"></td>
</tr>
</tr>
<tr>
Expand Down Expand Up @@ -266,7 +275,7 @@ Much of the functionality (but by no means all) is demonstrated below:
</tr>
<tr>
<td valign="top"><img src="resources/morphology/smooth.gif"></td>
<td valign="top"><img src="resources/morphology/gaussianSmooth.gif"></td>
<td valign="top"><img src="resources/morphology/smoothGaussian.gif"></td>
<td valign="top"><img src="resources/morphology/round.gif"></td>
<td valign="top" ><img src="resources/morphology/round2.gif"></td>
</tr>
Expand Down Expand Up @@ -337,10 +346,12 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Convex Hull</td>
<td align="center" valign="center"><b>Snap Hull</td>
<td align="center" valign="center"><b>Bounding Box</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/morphology/convexHull.png"></td>
<td valign="top" width="25%"><img src="resources/morphology/snapHull.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/envelope.png"></td>
</tr>
<tr>
<td align="center" valign="center"></td>
Expand Down Expand Up @@ -437,11 +448,12 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Extract Holes</td>
<td align="center" valign="center"><b>Nest</td>

<td align="center" valign="center"><b>Centroid Split</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/geometry_processing/extractHoles.gif"></td>
<td valign="top" width="25%"><img src="resources/geometry_processing/nest.gif"></td>
<td valign="top" width="25%"><img src="resources/geometry_processing/centroidSplit.gif"></td>
</tr>
</table>

Expand Down Expand Up @@ -487,10 +499,12 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Centroidal Relaxation</td>
<td align="center" valign="center"><b>Multiplicatively Weighted Voronoi</td>
<td align="center" valign="center"><b>Farthest-Point Voronoi</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/voronoi/centroidal.gif"></td>
<td valign="top" width="25%"><img src="resources/voronoi/mwvd.gif"></td>
<td valign="top" width="25%"><img src="resources/voronoi/fpvd.gif"></td>
</tr>
</table>

Expand Down Expand Up @@ -553,10 +567,12 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Extract Inner Vertices</td>
<td align="center" valign="center"><b>Fix Breaks</td>
<td align="center" valign="center"><b>Matching Quadrangulation</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/meshing/extractInnerVertices.gif"></td>
<td valign="top" width="25%"><img src="resources/geometry_processing/cleanCoverage.gif"></td>
<td valign="top" width="25%"><img src="resources/meshing/matchingQuadrangulation.png"></td>
</tr>
</table>

Expand All @@ -577,24 +593,25 @@ Much of the functionality (but by no means all) is demonstrated below:
</tr>

<tr>
<td align="center" valign="center" colspan="2"><b>Minimum Bounding Circle</td>
<td align="center" valign="center"><b>Maximum Inscribed Triangle</td>
<td align="center" valign="center"><b>Minimum Bounding Circle</td>
<td align="center" valign="center" colspan="2"><b>Minimum Bounding Ellipse</td>
</tr>
<tr>
<td valign="top"><img src="resources/optimisation/mit.png"></td>
<td valign="top"><img src="resources/optimisation/minimumBoundingCircle.png"></td>
<td valign="top"><img src="resources/optimisation/mbc2.png"></td>
<td valign="top"><img src="resources/optimisation/mbe1.png"></td>
<td valign="top" ><img src="resources/optimisation/mbe2.png"></td>
</tr>

<tr>
<td align="center" valign="center"><b>Minimum Bounding Triangle</td>
<td align="center" valign="center"><b>Envelope</td>
<td align="center" valign="center"><b>Minimum-width Annulus</td>
<td align="center" valign="center" colspan="2"><b>Problem of Apollonius</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/optimisation/mbt.png"></td>
<td valign="top" width="25%"><img src="resources/optimisation/envelope.png"></td>
<td valign="top" width="25%"><img src="resources/optimisation/minWidthAnnulus.png"></td>
<td valign="top"><img src="resources/optimisation/apollonius1.gif"></td>
<td valign="top"><img src="resources/optimisation/apollonius2.gif"></td>
</tr>
Expand All @@ -613,13 +630,13 @@ Much of the functionality (but by no means all) is demonstrated below:
</tr>

<tr>
<td align="center" valign="center"><b>Closest Vertex</td>
<td align="center" valign="center"><b>Circle Covering</td>
<td align="center" valign="center"><b>Closest Vertex</td>
<td align="center" valign="center" colspan="2"><b>Visibility Polygon / Isovist</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/pgs/closestVertex.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/circleCoverage.gif"></td>
<td valign="top" width="25%"><img src="resources/pgs/closestVertex.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/visibility.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/visibility2.gif"></td>
</tr>
Expand All @@ -637,9 +654,13 @@ Much of the functionality (but by no means all) is demonstrated below:

<tr>
<td align="center" valign="center"><b>Hilbert Sort Faces</td>
<td align="center" valign="center"><b>Spiral Sort Faces</td>
<td align="center" valign="center"><b>Centroid Sort Faces</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/optimisation/hilbertSortFaces.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/spiralSort.gif"></td>
<td valign="top" width="25%"><img src="resources/optimisation/centroidSort.gif"></td>
</tr>

</table>
Expand Down Expand Up @@ -925,9 +946,19 @@ Much of the functionality (but by no means all) is demonstrated below:
<tr>
<td align="center" valign="center"><b>Penrose Tiling</td>
<td align="center" valign="center"><b>Square-Triangle Tiling</td>
<td align="center" valign="center"><b>Annular Bricks</td>
<td align="center" valign="center"><b>Slice Division</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/tiling/penrose.png"></td>
<td valign="top" width="25%"><img src="resources/tiling/stTiling.png"></td>
<td valign="top" width="25%"><img src="resources/tiling/annularBricks.png"></td>
<td valign="top" width="25%"><img src="resources/tiling/sliceDivision.png"></td>
</tr>
<tr>
<td align="center" valign="center"><b>Arc Division</td>
</tr>
<tr>
<td valign="top" width="25%"><img src="resources/tiling/arcDivision.png"></td>
</tr>
</table>
18 changes: 17 additions & 1 deletion examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ A collection of example Processing sketches using *Processing Geometry Suite*. T

All examples are dynamic and/or interactive. Shown below are merely screenshots.

## blobbies

<img src="../resources/examples/blobbies.png" alt="" width="500"/>

## blowUp

<img src="../resources/examples/blowUp.png" alt="" width="500"/>
Expand All @@ -20,6 +24,10 @@ All examples are dynamic and/or interactive. Shown below are merely screenshots.

<img src="../resources/examples/dysonHatching.png" alt="" width="500"/>

## interlock

<img src="../resources/examples/interlock.png" alt="" width="500"/>

## intersectionBoids

<img src="../resources/examples/intersectionBoids.png" alt="" width="500"/>
Expand Down Expand Up @@ -52,6 +60,10 @@ All examples are dynamic and/or interactive. Shown below are merely screenshots.

<img src="../resources/examples/ripplingTriangles.png" alt="" width="500"/>

## organicSponge

<img src="../resources/examples/organicSponge.png" alt="" width="500"/>

## slice

<img src="../resources/examples/slice.png" alt="" width="500"/>
Expand All @@ -78,4 +90,8 @@ All examples are dynamic and/or interactive. Shown below are merely screenshots.

## voronoiCutout

<img src="../resources/examples/voronoiCutout.png" alt="" width="500"/>
<img src="../resources/examples/voronoiCutout.png" alt="" width="500"/>

## warpedQuilt

<img src="../resources/examples/warpedQuilt.png" alt="" width="500"/>
Loading