func (u UnitVector3D) Cross(v UnitVector3D) (s UnitVector3D) {
	sU := unit.Copy(u)
	unit.Mul(sU, v)

	var sV Vector3D
	sV[0] = u.V[1]*v.V[2] - u.V[2]*v.V[1]
	sV[1] = u.V[2]*v.V[0] - u.V[0]*v.V[2]
	sV[2] = u.V[0]*v.V[1] - u.V[1]*v.V[0]

	s = UnitVector3D{sU, sV}
	return
}
func (u UnitVector3D) Scale(f unit.Quantity) (s UnitVector3D) {
	sU := unit.Copy(u)
	unit.Mul(sU, &f)

	var sV Vector3D
	for i := range u.V {
		sV[i] = f.Value() * u.V[i]
	}

	s = UnitVector3D{sU, sV}
	return
}
func (u UnitVector3D) Dot(v UnitVector3D) (s *unit.Quantity) {
	sU := unit.Copy(u)
	unit.Mul(sU, v)

	var sV float64
	for i := range u.V {
		sV += u.V[i] * v.V[i]
	}

	s = unit.CreateQuantity(sV, sU)
	return
}
func (u UnitVector3D) Add(v UnitVector3D) (s UnitVector3D) {
	if !unit.DimensionsMatch(u, v) {
		panic("Attempted to add the values of two units whose dimensions do not match.")
	}
	sU := unit.Copy(u)

	var sV Vector3D
	for i := range u.V {
		sV[i] = u.V[i] + v.V[i]
	}

	s = UnitVector3D{sU, sV}
	return
}