A Bitmapper's Companion - zine/book about bitmap drawing algorithms and math with code examples in Rust
A small zine/book written in LaTeX. In progress. See Building section below for how to build.
Click to show planned contents
- Introduction
- Data representation
- Displaying pixels to your screen
- Bits to byte pixels
- Loading graphics files in Rust
- Including xbm files in Rust
- Points And Lines
- Distance between two points
- Equations of a line
- Line through a point ๐ = (๐ฅ๐, ๐ฆ๐) and a slope ๐
- Line through two points
- Distance from a point to a line
- Using the implicit equation form
- Using an ๐ฟ defined by two points ๐1, ๐2
- Using an ๐ฟ defined by a point ๐๐ and angle ฬ๐
- Find perpendicular to line that passes through given point
- Angle between two lines
- Intersection of two lines
- Line equidistant from two points
- Normal to a line through a point
- Points And Line Segments
- Drawing a line segment from its two endpoints
- Drawing line segments with width
- Intersection of two line segments
- Fast intersection of two line segments
- Points, Lines and Circles
- Equations of a circle
- Bounding circle
- Curves other than circles
- Parametric elliptical arcs
- Bรฉzier curves
- Points, Lines and Shapes
- Union, intersection and difference of polygons
- Centroid of polygon
- Polygon clipping
- Triangle filling
- Flood filling
- Vectors, matrices and transformations
- Rotation of a bitmap
- Fast 2D Rotation
- 90ยฐ Rotation of a bitmap by parallel recursive subdivision
- Magnification/Scaling
- Smoothing enlarged bitmaps
- Stretching lines of bitmaps
- Mirroring
- Shearing
- The relationship between shearing factor and angle
- Projections
- Addendum
- Faster Drawing a line segment from its two endpoints using Sym- metry
- Joining the ends of two wide line segments together
- Composing monochrome bitmaps with separate alpha channel data
- Orthogonal connection of two points
- Join segments with round corners
- Faster line clipping
- Space-filling Curves
- Hilbert curve
- Sierpiลski curve
- Peano curve
- Z-order curve
- flowsnake curve
- Dithering
- Floyd-Steinberg
- Atkinson dithering
- Marching squares
Cover |
Thumb index overview |
---|---|
Frontmatter | contents |
Page spread | Bezier interactive demo |
Run make
(might need to run it twice), output will be in the ./build
directory.
To run the rust example binaries, first you can inspect them with ls ./src/bin/
, for example:
$ ls ./src/bin
atkinsondither.rs
beams.rs
bezierglyph.rs
bezier.rs
boundingcircle.rs
bresenham.rs
distance_between_two_points.rs
floyddither.rs
fonts.rs
hilbert.rs
introduction.rs
rotation.rs
scale.rs
shearing.rs
smooth_scale.rs
xbmtors.rs
zcurve.rs
Then execute one with cargo run --bin
for example cargo run --bin atkinsondither
.