func (a CRD) Row() CRD {
	return CRD{0, a.R, 0}
}
Row returns the vector projected on the R axis (i.e. with C and D nulled).
package coord
type CRD struct {
	C, R, D int16
}
func CRDof(v Coordinates) CRD {
	x, y, z := v.Cartesian()
	return CRD{int16(x), int16(y), int16(z)}
}
func (a CRD) Cartesian() (x, y, z float32) {
	return float32(a.C), float32(a.R), float32(a.D)
}
func (a CRD) XY() XY {
	return XY{float32(a.C), float32(a.R)}
}
func (a CRD) XYZ() XYZ {
	return XYZ{float32(a.C), float32(a.R), float32(a.D)}
}
func (a CRD) XYZW(w float32) XYZW {
	return XYZW{float32(a.C), float32(a.R), float32(a.D), w}
}
func (a CRD) Plus(b CRD) CRD {
	return CRD{a.C + b.C, a.R + b.R, a.D + b.D}
}
func (a CRD) Pluss(s int16) CRD {
	return CRD{a.C + s, a.R + s, a.D + s}
}
func (a CRD) Minus(b CRD) CRD {
	return CRD{a.C - b.C, a.R - b.R, a.D - b.D}
}
func (a CRD) Minuss(s int16) CRD {
	return CRD{a.C - s, a.R - s, a.D - s}
}
func (a CRD) Opposite() CRD {
	return CRD{-a.C, -a.R, -a.D}
}
func (a CRD) Times(s int16) CRD {
	return CRD{a.C * s, a.R * s, a.D * s}
}
func (a CRD) Timescr(b CRD) CRD {
	return CRD{a.C * b.C, a.R * b.R, a.D * b.D}
}
func (a CRD) Slash(s int16) CRD {
	return CRD{a.C / s, a.R / s, a.D / s}
}
func (a CRD) Slashcr(b CRD) CRD {
	return CRD{a.C / b.C, a.R / b.R, a.D / b.D}
}
func (a CRD) Mod(s int16) CRD {
	return CRD{a.C % s, a.R % s, a.D % s}
}
func (a CRD) Modcr(b CRD) CRD {
	return CRD{a.C % b.C, a.R % b.R, a.D % b.D}
}
func (a CRD) FlipC() CRD {
	return CRD{-a.C, a.R, a.D}
}
func (a CRD) FlipR() CRD {
	return CRD{a.C, -a.R, a.D}
}
func (a CRD) FlipD() CRD {
	return CRD{a.C, a.R, -a.D}
}
func (a CRD) Col() CRD {
	return CRD{a.C, 0, 0}
}