All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.utils.Matrix Maven / Gradle / Ivy

The newest version!
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/java-pdf-library-support/
 *
 * (C) Copyright 1997-2013, IDRsolutions and Contributors.
 *
 * 	This file is part of JPedal
 *
     This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


 *
 * ---------------
 * Matrix.java
 * ---------------
 */
package org.jpedal.utils;

/**
 * provide matrix functionality used in pdf to calculate co-ords
 */
public class Matrix {

	public Matrix() {}

	// ////////////////////////////////////////////////////////////////////////
	/** multiply two 3 * 3 matrices together & return result */
	final public static float[][] multiply(float[][] matrix1, float[][] matrix2) {

		// output matrix for results
		float[][] output_matrix = new float[3][3];

		// multiply
		for (int col = 0; col < 3; col++) {
			for (int row = 0; row < 3; row++) {
				output_matrix[row][col] = (matrix1[row][0] * matrix2[0][col]) + (matrix1[row][1] * matrix2[1][col])
						+ (matrix1[row][2] * matrix2[2][col]);
				// allow for rounding errors
				/**
				 * if((output_matrix[row][col]>0.99)&&(output_matrix[row][col]<1)) output_matrix[row][col]=1; else
				 * if((output_matrix[row][col]<-0.99)&&(output_matrix[row][col]>-1)) output_matrix[row][col]=-1; else
				 * if((output_matrix[row][col]>0.0)&&(output_matrix[row][col]<0.001)) output_matrix[row][col]=0; else
				 * if((output_matrix[row][col]<0.0)&&(output_matrix[row][col]>-0.001)) output_matrix[row][col]=0;
				 */
				// if(Math.abs(output_matrix[row][col])<0.01)
				// output_matrix[row][col] =0;
			}
		}
		return output_matrix;
	}

	// ////////////////////////////////////////////////////////////////////////

	/** multiply two 3 * 3 matrices together & return result */
	final public static double[][] multiply(double[][] matrix1, double[][] matrix2) {

		// output matrix for results
		double[][] output_matrix = new double[3][3];

		// multiply
		for (int col = 0; col < 3; col++) {
			for (int row = 0; row < 3; row++) {
				output_matrix[row][col] = (matrix1[row][0] * matrix2[0][col]) + (matrix1[row][1] * matrix2[1][col])
						+ (matrix1[row][2] * matrix2[2][col]);
				// allow for rounding errors
				/**
				 * if((output_matrix[row][col]>0.99)&&(output_matrix[row][col]<1)) output_matrix[row][col]=1; else
				 * if((output_matrix[row][col]<-0.99)&&(output_matrix[row][col]>-1)) output_matrix[row][col]=-1; else
				 * if((output_matrix[row][col]>0.0)&&(output_matrix[row][col]<0.001)) output_matrix[row][col]=0; else
				 * if((output_matrix[row][col]<0.0)&&(output_matrix[row][col]>-0.001)) output_matrix[row][col]=0;
				 */
				// if(Math.abs(output_matrix[row][col])<0.01)
				// output_matrix[row][col] =0;
			}
		}
		return output_matrix;
	}

	// ////////////////////////////////////////////////////////////////////////

	/** show matrix (used to debug) */
	final public static void show(float[][] matrix1) {

		// show lines
		for (int row = 0; row < 3; row++) {
			LogWriter.writeLog(row + "((" + matrix1[row][0] + " , " + matrix1[row][1] + " , " + matrix1[row][2] + " ))");
			// System.out.println( row + "(" + matrix1[row][0] + " , " + matrix1[row][1] + " , " + matrix1[row][2] + " )" );
		}
	}

	// ////////////////////////////////////////////////////////////////////////
	/** show matrix (used to debug) */
	final public static void show(double[][] matrix1) {

		// show lines
		for (int row = 0; row < 3; row++) {
			LogWriter.writeLog(row + "((" + matrix1[row][0] + " , " + matrix1[row][1] + " , " + matrix1[row][2] + " ))");
			// System.out.println( row + "(" + matrix1[row][0] + " , " + matrix1[row][1] + " , " + matrix1[row][2] + " )" );
		}
	}

	/** show matrix (used to debug) */
	final public static boolean compare(float[][] m1, float[][] m2) {

		boolean isIdentical = true;

		// show lines
		for (int r = 0; r < 3; r++) {
			for (int c = 0; c < 3; c++) {
				if (m1[r][c] != m2[r][c]) {
					isIdentical = false;
				}
			}

		}

		return isIdentical;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy