public static PosXYZ AlignTransform(PosXYZ pos, double[,] trans)
 {
     return(new PosXYZ(RigidAlign.Transform(pos.Data(), trans))
     {
         Z = pos.Z
     });
 }
 public static PosXYZ AffineInverseTransform(TransformParams trans, PosXYZ pos)
 {
     return(new PosXYZ(RigidAlign.AffineInverseTransform(pos.Data(), trans.ToDoubles()))
     {
         Z = pos.Z
     });
 }
        public static Tuple <double[, ], double> CalcAlignTransform(List <PosXYZ> platform1, List <PosXYZ> platform2)
        {
            var ret = RigidAlign.Align(
                platform1.Select(p => p.X).ToArray(),
                platform1.Select(p => p.Y).ToArray(),
                platform2.Select(p => p.X).ToArray(),
                platform2.Select(p => p.Y).ToArray()
                );

            return(new Tuple <double[, ], double>(ret.Item1, ret.Item2));
        }