123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // SPDX-License-Identifier: Unlicense OR MIT
- /*
- Package f32 is a float32 implementation of package image's
- Point and affine transformations.
- The coordinate space has the origin in the top left
- corner with the axes extending right and down.
- */
- package f32
- import (
- "image"
- "math"
- "strconv"
- )
- // A Point is a two dimensional point.
- type Point struct {
- X, Y float32
- }
- // String return a string representation of p.
- func (p Point) String() string {
- return "(" + strconv.FormatFloat(float64(p.X), 'f', -1, 32) +
- "," + strconv.FormatFloat(float64(p.Y), 'f', -1, 32) + ")"
- }
- // Pt is shorthand for Point{X: x, Y: y}.
- func Pt(x, y float32) Point {
- return Point{X: x, Y: y}
- }
- // Add return the point p+p2.
- func (p Point) Add(p2 Point) Point {
- return Point{X: p.X + p2.X, Y: p.Y + p2.Y}
- }
- // Sub returns the vector p-p2.
- func (p Point) Sub(p2 Point) Point {
- return Point{X: p.X - p2.X, Y: p.Y - p2.Y}
- }
- // Mul returns p scaled by s.
- func (p Point) Mul(s float32) Point {
- return Point{X: p.X * s, Y: p.Y * s}
- }
- // Div returns the vector p/s.
- func (p Point) Div(s float32) Point {
- return Point{X: p.X / s, Y: p.Y / s}
- }
- // Round returns the integer point closest to p.
- func (p Point) Round() image.Point {
- return image.Point{
- X: int(math.Round(float64(p.X))),
- Y: int(math.Round(float64(p.Y))),
- }
- }
|