public static String assertRationalRotationMatrix(double[][] matrix,
			int decimalPlaces) {

		String rational = assertRationalMatrix(matrix);

		if (rational != null) {

			return rational;

		}

		if (matrix.length != 3) {

			return "The rotation matrix does not comprise three rows:"
					+ NEWLINE + representMatrix(matrix, decimalPlaces);

		}

		if (matrix[0].length != 3) {

			return "The rotation matrix does not comprise three columns:"
					+ NEWLINE + representMatrix(matrix, decimalPlaces);

		}

		rational = assertRationalUnitVector(matrix[0], decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the first row: "
					+ rational;

		}

		rational = assertRationalUnitVector(matrix[1], decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the second row: "
					+ rational;

		}

		rational = assertRationalUnitVector(matrix[2], decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the third row: "
					+ rational;

		}

		rational = assertRationalUnitVector(new double[] { matrix[0][0],
				matrix[1][0], matrix[2][0] }, decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the first column: "
					+ rational;

		}

		rational = assertRationalUnitVector(new double[] { matrix[0][1],
				matrix[1][1], matrix[2][1] }, decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the second column: "
					+ rational;

		}

		rational = assertRationalUnitVector(new double[] { matrix[0][2],
				matrix[1][2], matrix[2][2] }, decimalPlaces);

		if (rational != null) {

			return "The rotation matrix does not comprise a rational unit vector along the third column: "
					+ rational;

		}

		return null;

	}