wallpaper-0.1.0.0: README.md
# wallpaper
## Symmetry Patterns
Create wallpaper patterns using the domain coloring algorithm as described in
[Creating Symmetry], by Frank A. Farris, (c) 2015 Princeton University Press.
The api is likely to change as this is still an alpha release.
[Creating Symmetry]: https://www.amazon.com/Creating-Symmetry-Mathematics-Wallpaper-Patterns/dp/0691161739/ref=sr_1_1?ie=UTF8&qid=1495813829&sr=8-1&keywords=creating+symmetry
## Installation
Install [stack](https://docs.haskellstack.org/en/stable/README/)
```
git clone https://github.com/jeffreyrosenbluth/wallpaper.git
cd wallpaper
stack build
stack exec wallpaper myWallpaper.yaml
-- or
stack exec rosette myRosette.yaml
```
### Wallpaper and Frieze

To make a wallpaper or frieze image, run the wallpaper function with a yaml
file like the following. There are many [examples].
[examples]: https://github.com/jeffreyrosenbluth/wallpaper/tree/master/examples
```yaml
# The wallpaper or frieze symmetry group in short IUC notation.
# If the group lattice takes parameters then they follow tagged
# by there names, for example:
# Group:
# Name: p1
# xi: 1.5
# eta: 2.1
# If the group lattice takes no parameters you can use either
# Group:
# Name: p4
# or, just directly:
# Group: p4
Group: p3m1
# A list of doubly indexed complex coefficients for the wave function.
# Additional wave packets will be added in order to create the symmetries in
# the specified symmetry group.
Coefficients:
- A(n,m): [0.75, 0.25] # 0.75 + 0.25i
n: 1 # first index of coefficient
m: 0 # second index of coefficient
- A(n,m): [0.2, -0.2]
n: -2
m: 2
- A(n,m): [0.6, 0.1]
n: 1
m: -1
# Optional field for setting the style, choices are: plain, morph (which takes
# one parameter: cutoff), and blend (which takes as an argument a group object).
# morph will interpolate between the color wheel and its 180 degree rotation,
# leaving the proportion specified by cutoff at the beginning and end.
# Blend interpolates horizontally between two different wallpaper groups.
# If left unspecified type will default to style: plain.
Type:
style: blend
group:
name: p31m
Options:
width: 945 # width in pixels of the output image
height: 405 # height in pixels of the output image
repeat-length: 90 # used to convert pixel coordinates to real numbers
scale-factor: 0.5 # to scale the color wheel so that it contains the domain values
# Optional, defaults to the standard artists color wheel of infinite size.
Colorwheel-path: examples/rose_small.png
# Optional, Preprocess the image, choices are: none, fliphorizontal,
# flipvertical, flipboth, invert, antisymmvertical, and antisymmhorizontal.
# The default is none.
Pre-process: AntiSymmHorizontal
# File to write the result. The file type will match the extension.
# Choices for extenstion are: png, jpg, tif, and bmp.
Output-path: myWallpaper.jpg
```
### Rosette

To make a rosette, use a yaml file like the following. There are also some
[examples], look at rosetteP.yaml and rosettePM.yaml.
```yaml
P-fold: 5 # the number of rotational symmetries
Mirror: true # symmetric about the horizontal axis
# (n - m) mod P-fold must be 0, otherwise the wave packet will not be included.
Coefficients:
- A(n,m): [0.5, 0]
n: 5 # (5 - 0) mod 5 = 0
m: 0
- A(n,m): [0.3, 0]
n: 4 # (4 - (-6)) mod 5 = 0
m: -6
Options:
width: 540
height: 540
repeat-length: 135
scale-factor: 0.5
Colorwheel-path: examples/rose_small.png
Pre-process: invert
Output-path: myRosette.jpg
```