Accord.Statistics.Analysis.ProcrustesAnalysis.Rotate C# (CSharp) Method

Rotate() private method

Applies the rotation operator to the given dataset according to the reference dataset
private Rotate ( ProcrustedDataset p, ProcrustedDataset p_reference ) : ].double[
p ProcrustedDataset Procrusted dataset to rotate
p_reference ProcrustedDataset Reference procrusted dataset
return ].double[
        double[,] Rotate(ProcrustedDataset p, ProcrustedDataset p_reference)
        {
            // Rotation calculus per Amy Ross, Procrustes Analysis : http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.119.2686&rep=rep1&type=pdf

            SingularValueDecomposition svd = new SingularValueDecomposition(p_reference.Dataset.TransposeAndDot(p.Dataset));

            double[,] Q = svd.RightSingularVectors.TransposeAndDot(svd.LeftSingularVectors);

            p.RotationMatrix = Q;

            return p.Dataset.Dot(Q);
        }