/* * Copyright (C) 2015 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */ package edu.stanford.rsl.tutorial.basics; import edu.stanford.rsl.conrad.geometry.Rotations; import edu.stanford.rsl.conrad.geometry.Rotations.BasicAxis; import edu.stanford.rsl.conrad.numerics.SimpleMatrix; import edu.stanford.rsl.conrad.numerics.SimpleMatrix.MatrixNormType; import edu.stanford.rsl.conrad.numerics.SimpleOperators; /** * Simple Class to show rotation functionalities using matrices. * * @author akmaier * */ public class RotationMatrixExamples { public static void main(String[] args) { // Create 90 degree rotation about Z SimpleMatrix rotZ = Rotations.createBasicZRotationMatrix(Math.PI/180*-142); // Create 90 degree rotation about Y SimpleMatrix rotY = Rotations.createBasicYRotationMatrix(Math.PI/180*90); // Create 90 degree rotation about X SimpleMatrix rotX = Rotations.createBasicXRotationMatrix(Math.PI/180*-142); // Combine to single matrix SimpleMatrix combined = SimpleOperators.multiplyMatrixProd(SimpleOperators.multiplyMatrixProd(rotZ, rotY), rotX); // Write matrix to stdout System.out.println(combined); // Create a new matrix with rotation about Y SimpleMatrix rotY2 = Rotations.createBasicRotationMatrix(BasicAxis.Y_AXIS, Math.PI/2); // output the matrix System.out.println(rotY2); // compute element-wise difference between the two matrices SimpleMatrix diff = SimpleOperators.subtract(combined, rotY2); // write the Frobenius norm to stdout: System.out.println("Frobenius norm of difference:" + diff.norm(MatrixNormType.MAT_NORM_FROBENIUS)); // Here we found a singularity of the Euler description. Both matrices are almost identical (up to numerical accucary). SimpleMatrix test = new SimpleMatrix("[[1, 0, 0]; [0, 0, 1]; [0,-1,0];]"); System.out.println(SimpleOperators.multiplyMatrixProd(test.transposed(),combined)); } }