public void Write(M44f x)
 {
     Write(x.M00); Write(x.M01); Write(x.M02); Write(x.M03);
     Write(x.M10); Write(x.M11); Write(x.M12); Write(x.M13);
     Write(x.M20); Write(x.M21); Write(x.M22); Write(x.M23);
     Write(x.M30); Write(x.M31); Write(x.M32); Write(x.M33);
 }
        public AngleBetweenFloat()
        {
            var rnd = new RandomSystem(1);

            A.SetByIndex(i => rnd.UniformV3fDirection());
            angles.SetByIndex(i => rnd.UniformFloat() * (float)Constant.Pi);
            B.SetByIndex(i =>
            {
                V3f v;
                do
                {
                    v = rnd.UniformV3fDirection();
                }while (v.Dot(A[i]).IsTiny());

                V3f axis = v.Cross(A[i]).Normalized;

                return(M44f.Rotation(axis, angles[i]).TransformDir(A[i]));
            });
        }