Constructive geometry
- Dominant language
- Haskell
- Stars
- 1.3k
- Forks
- 201
- PR merge metrics
- No merged PRs in 30d
Description
Additional operations should be added to combine shapes:
```
intersection :: [Picture] -> Picture
difference :: Picture -> Picture -> Picture
```
(Names are debatable.) `intersection` should produce a picture bounded by the intersection of the list. The second should produce a picture containing all areas of the first image that are not also in the second. Note that together with the existing `pictures`, this gives the three basic operations for constructive geometry.
The implementation is a little tricky. Combining two images in this way can be done with globalCompositeOperation (https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html) But getting the resulting shapes to nest correctly will involve using off-screen canvases as temporaries. Since creating a new off-screen canvas is expensive, this should involve determining the minimum number of offscreen canvases needed, and reusing them between frames.
Contributor guide
Assessment
This issue has not been assessed yet.