mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
b5f12c5f26
There are no public API that uses f32.Rectangle anymore. Move Rectangle to an internal package for internal use. Signed-off-by: Elias Naur <mail@eliasnaur.com>
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
// 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))),
|
|
}
|
|
}
|