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 - [email protected]
http://biojava.org/mailman/listinfo/biojava-l