import java.util.ArrayList;
import javax.vecmath.Point3d;
import org.apache.commons.math3.linear.*;
import org.apache.commons.math3.util.FastMath;    

public class tuval1{

    public static void main(String[] args) {
        System.setProperty("sun.awt.noerasebackground", "true");
        new tuval7();        
    }
    
   public ArrayList<Point3d> matrixToPointList(RealMatrix mat) {
    	ArrayList<Point3d> pointList = new ArrayList<>();
    	double x,y,z;
    	for (int i=0; i<mat.getColumnDimension(); i++) {
			x = mat.getEntry(0,i);
			y = mat.getEntry(1,i);
			z = mat.getEntry(2,i);
			Point3d point = new Point3d(x,y,z);
    		pointList.add(point);
    	}
    	return pointList;
    }
    
    public RealMatrix pointListToMatrix(Point3d pointListArray[]) {
    	RealMatrix mat = MatrixUtils.createRealMatrix(4,pointListArray.length);
    	double arrayCol[] = {0,0,0,0};
    	for(int i=0; i<pointListArray.length; i++) {
    		arrayCol[0] = pointListArray[i].getX();
    		arrayCol[1] = pointListArray[i].getY();
    		arrayCol[2] = pointListArray[i].getZ();
    		arrayCol[3] = 1;
    		mat.setColumn(i, arrayCol);
    	}
    	return mat;
    }
    
    public RealMatrix translationM(double tx,double ty, double tz) {
    	double[][] matrixData = { {1,0,0,tx}, {0,1,0,ty}, {0,0,1,tz}, {0,0,0,1}};
    	RealMatrix mat = MatrixUtils.createRealMatrix(matrixData);
		return mat;
    }
    
    public RealMatrix rotateX(double fi) {
    	double[][] matrixData = { {1,0,0,0}, {0,FastMath.cos(fi),-FastMath.sin(fi),0}, {0,FastMath.sin(fi),FastMath.cos(fi),0}, {0,0,0,1}};
    	RealMatrix mat = MatrixUtils.createRealMatrix(matrixData);
    	return mat;
    }
    
    public RealMatrix rotateY(double fi) {
    	double[][] matrixData = { {FastMath.cos(fi),0,FastMath.sin(fi),0}, {0,1,0,0}, {-FastMath.sin(fi),0,FastMath.cos(fi),0}, {0,0,0,1}};
    	RealMatrix mat = MatrixUtils.createRealMatrix(matrixData);
    	return mat;
    }
    
    public RealMatrix rotateZ(double fi) {
    	double[][] matrixData = { {FastMath.cos(fi),-FastMath.sin(fi),0,0}, {FastMath.sin(fi),FastMath.cos(fi),0,0}, {0,0,1,0}, {0,0,0,1}};
    	RealMatrix mat = MatrixUtils.createRealMatrix(matrixData);
    	return mat;
    }
    
    public RealMatrix scale(double scale) {
    	double[][] matrixData = { {scale,0,0,0}, {0,scale,0,0}, {0,0,scale,0}, {0,0,0,1}};
    	RealMatrix mat = MatrixUtils.createRealMatrix(matrixData);
    	return mat;
    }
}