func (a XY64) Length() float64 {
	return float64(math.Sqrt(float64(a.X*a.X + a.Y*a.Y)))
}
Length returns the euclidian length of the vector.
package coord
import (
	"math"
)
type XY64 struct {
	X float64
	Y float64
}
func (a XY64) XY() XY {
	return XY{float32(a.X), float32(a.Y)}
}
func (a XY64) Cartesian() (x, y, z float32) {
	return float32(a.X), float32(a.Y), 0
}
func (a XY64) XYZ64() XYZ64 {
	return XYZ64{a.X, a.Y, 1.0}
}
func (a XY64) Plus(b XY64) XY64 {
	return XY64{a.X + b.X, a.Y + b.Y}
}
func (a XY64) Pluss(s float64) XY64 {
	return XY64{a.X + s, a.Y + s}
}
func (a XY64) Minus(b XY64) XY64 {
	return XY64{a.X - b.X, a.Y - b.Y}
}
func (a XY64) Minuss(s float64) XY64 {
	return XY64{a.X - s, a.Y - s}
}
func (a XY64) Opposite() XY64 {
	return XY64{-a.X, -a.Y}
}
func (a XY64) Times(s float64) XY64 {
	return XY64{a.X * s, a.Y * s}
}
func (a XY64) Timesxy(b XY64) XY64 {
	return XY64{a.X * b.X, a.Y * b.Y}
}
func (a XY64) Slash(s float64) XY64 {
	return XY64{a.X / s, a.Y / s}
}
func (a XY64) Slashxy(b XY64) XY64 {
	return XY64{a.X / b.X, a.Y / b.Y}
}
func (a XY64) Mod(s float64) XY64 {
	return XY64{math.Mod(a.X, s), math.Mod(a.Y, s)}
}
func (a XY64) Modxy(b XY64) XY64 {
	return XY64{math.Mod(a.X, b.X), math.Mod(a.Y, b.Y)}
}
func (a XY64) Modf() (intg, frac XY64) {
	xintg, xfrac := math.Modf(a.X)
	yintg, yfrac := math.Modf(a.Y)
	return XY64{xintg, yintg}, XY64{xfrac, yfrac}
}
func (a XY64) Dot(b XY64) float64 {
	return a.X*b.X + a.Y*b.Y
}
func (a XY64) PerpDot(b XY64) float64 {
	return a.X*b.Y - a.Y*b.X
}