I'd like to show u the following 2 functions that may be valuable in theCalc class: /**Returns a rotated Structure object (the rotation is around the origo) * * @param ostructure Structure -- the stucture to be rotated * @param from Atom -- the reference Atom's originalcoordinates * @param to Atom -- the reference Atom's desiredcoordinates * @return Structure -- null if there was an error */ public static Structure rotate3D(Structure ostructure,Atom from, Atom to)throws StructureException { Structure nstructure = new StructureImpl(); //calculate the angle of rotation final double angle = radangle(from,to); if (angle == 0 || angle == Math.PI) { throw new StructureException ("The rotation angle is 0 or 180degrees!"); } //calculate te unit normal vector of the (origo, from, to) pane //which will serve as an arbitary axis for the rotation Atom axisvector = vectorProduct(from,to); axisvector = unitVector(axisvector); //calculate the trigonometric values final double c = Math.cos(angle); final double s = Math.sin(angle); final double t = 1-Math.cos(angle); final double x = axisvector.getX(); final double y = axisvector.getY(); final double z = axisvector.getZ(); //and now the matrix double[][] rotationmatrix = new double[3][3]; rotationmatrix[0][0] = t*x*x+c ;rotationmatrix[0][1] =t*x*y+s*z;rotationmatrix[0][2] = t*x*z-s*y; rotationmatrix[1][0] = t*x*y-s*z;rotationmatrix[1][1] =t*y*y+c;rotationmatrix[1][2] = t*y*z+s*x; rotationmatrix[2][0] = t*x*y+s*y;rotationmatrix[2][1] =t*y*z-s*x;rotationmatrix[2][2] = t*z*z+c; //and now the rotation nstructure = (Structure) ostructure.clone(); try { rotate(nstructure, rotationmatrix); } catch (StructureException e) { System.out.println(e); nstructure = null; } return nstructure; } /**Calculates the a,origo,b angle in radians * * @param a Atom * @param b Atom * @return double */
public static double radangle(Atom a, Atom b) { final double skalar = skalarProduct(a,b); final double radangle = Math.acos( skalar/( amount(a) * amount(b) )); return radangle; } _______________________________________________ Biojava-l mailing list - Biojava-l@biojava.org http://biojava.org/mailman/listinfo/biojava-l