public static double[][] translateAlongArbitraryAxis(double[][] matrix,
			double units, double[] vector) {

		double[] translation = getTranslationFromTransform(matrix);

		double xtranslation = translation[0];
		double ytranslation = translation[1];
		double ztranslation = translation[2];

		double xvector = vector[0];
		double yvector = vector[1];
		double zvector = vector[2];

		double xtranslated = xtranslation + (units * xvector);
		double ytranslated = ytranslation + (units * yvector);
		double ztranslated = ztranslation + (units * zvector);

		double[] translated = new double[] { xtranslated, ytranslated,
				ztranslated };

		double[][] rotation = getRotationFromTransform(matrix);

		double[][] transform = createTransformForRotationAndTranslation(
				rotation, translated);

		return transform;

	}