Revision: 18393
          http://sourceforge.net/p/jmol/code/18393
Author:   hansonr
Date:     2013-07-01 20:03:33 +0000 (Mon, 01 Jul 2013)
Log Message:
-----------


Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/modelset/AtomCollection.java
    trunk/Jmol/src/org/jmol/script/ScriptMathProcessor.java
    trunk/Jmol/src/org/jmol/util/Quaternion.java
    trunk/Jmol/src/org/jmol/util/Tensor.java

Modified: trunk/Jmol/src/org/jmol/modelset/AtomCollection.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/AtomCollection.java        2013-07-01 
18:38:26 UTC (rev 18392)
+++ trunk/Jmol/src/org/jmol/modelset/AtomCollection.java        2013-07-01 
20:03:33 UTC (rev 18393)
@@ -282,7 +282,7 @@
   }
 
   public JmolList<Tensor> getAllAtomTensors(String type) {
-    return atomTensors.get(type.toLowerCase());
+    return (atomTensors == null ? null : atomTensors.get(type.toLowerCase()));
   }
   
   private Tensor[] getTensorList(JmolList<Tensor> list) {

Modified: trunk/Jmol/src/org/jmol/script/ScriptMathProcessor.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/ScriptMathProcessor.java     2013-07-01 
18:38:26 UTC (rev 18392)
+++ trunk/Jmol/src/org/jmol/script/ScriptMathProcessor.java     2013-07-01 
20:03:33 UTC (rev 18393)
@@ -3367,6 +3367,8 @@
         // q%2 y
         // q%3 z
         // q%4 normal
+        // q%5 EulerZXZ (degrees)
+        // q%6 EulerZYZ (degrees)
         // q%-1 vector(1)
         // q%-2 theta
         // q%-3 Matrix column 0
@@ -3374,7 +3376,6 @@
         // q%-5 Matrix column 2
         // q%-6 AxisAngle format
         // q%-9 Matrix format
-        // q%-10 EulerZXZ (degrees)
         case 0:
           return addXFloat(pt4.w);
         case 1:
@@ -3391,7 +3392,7 @@
         case 5:
           return addXAF(q.getEulerZXZ());
         case 6:
-          return addXAF(q.getEulerZXZ());
+          return addXAF(q.getEulerZYZ());
         case -1:
           return addXPt(P3.newP(q.getVector(-1)));
         case -2:

Modified: trunk/Jmol/src/org/jmol/util/Quaternion.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/Quaternion.java        2013-07-01 18:38:26 UTC 
(rev 18392)
+++ trunk/Jmol/src/org/jmol/util/Quaternion.java        2013-07-01 20:03:33 UTC 
(rev 18393)
@@ -37,10 +37,8 @@
  * This ensures that the reported theta is always positive, and the normal
  * reported is always associated with a positive theta.  
  * 
- * By Bob Hanson, hans...@stolaf.edu 6/2008
+ * @author Bob Hanson, hans...@stolaf.edu 6/2008
  * 
- * 
- * 
  */
 
 public class Quaternion {
@@ -315,11 +313,23 @@
     q3 *= -1;
   }
 
-  public static final Quaternion getQuaternionFrame(P3 center, Tuple3f x, 
Tuple3f y) {
+  /**
+   * returns a quaternion frame based on three points (center, x, and any 
point in xy plane)
+   * or two vectors (vA, vB).
+   * 
+   * @param center  (null for vA/vB option)
+   * @param x
+   * @param xy
+   * @return quaternion for frame
+   */
+  public static final Quaternion getQuaternionFrame(P3 center, Tuple3f x,
+                                                    Tuple3f xy) {
     V3 vA = V3.newV(x);
-    vA.sub(center);
-    V3 vB = V3.newV(y);
-    vB.sub(center);
+    V3 vB = V3.newV(xy);
+    if (center != null) {
+      vA.sub(center);
+      vB.sub(center);
+    }
     return getQuaternionFrameV(vA, vB, null, false);
   }
   
@@ -804,16 +814,21 @@
   }
 
   public float[] getEulerZYZ() {
-    return null;
+    // http://www.swarthmore.edu/NatSci/mzucker1/e27/diebel2006attitude.pdf
+    double rA, rB, rG;
+    rA = Math.atan2(2 * (q2 * q3 - q0 * q1), 2 * (q1 * q3 + q0 * q2 ));
+    rB = Math.acos(q3 * q3 - q2 * q2 - q1 * q1 + q0 * q0);
+    rG = Math.atan2( 2 * (q2 * q3 + q0 * q1), 2 * (q0 * q2 - q1 * q3));
+    return new float[]  {(float) (rA / RAD_PER_DEG), (float) (rB / 
RAD_PER_DEG), (float) (rG / RAD_PER_DEG)};
   } 
 
   public float[] getEulerZXZ() {
     // NOT 
http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
     // http://www.swarthmore.edu/NatSci/mzucker1/e27/diebel2006attitude.pdf
     double rA, rB, rG;
+    rA = Math.atan2(2 * (q1 * q3 + q0 * q2), 2 * (q0 * q1 - q2 * q3 ));
+    rB = Math.acos(q3 * q3 - q2 * q2 - q1 * q1 + q0 * q0);
     rG = Math.atan2( 2 * (q1 * q3 - q0 * q2), 2 * (q2 * q3 + q0 * q1));
-    rB = Math.acos(q3 * q3 - q2 * q2 - q1 * q1 + q0 * q0);
-    rA = Math.atan2(2 * (q1 * q3 + q0 * q2), 2 * (q0 * q1 - q2 * q3 ));
     return new float[]  {(float) (rA / RAD_PER_DEG), (float) (rB / 
RAD_PER_DEG), (float) (rG / RAD_PER_DEG)};
   }
   

Modified: trunk/Jmol/src/org/jmol/util/Tensor.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/Tensor.java    2013-07-01 18:38:26 UTC (rev 
18392)
+++ trunk/Jmol/src/org/jmol/util/Tensor.java    2013-07-01 20:03:33 UTC (rev 
18393)
@@ -29,7 +29,7 @@
 
 /**
  * @author Bob Hanson hans...@stolaf.edu 6/30/2013
- * 
+ * @author Simone Sturniolo 
  */
 public class Tensor {
 
@@ -125,7 +125,8 @@
     switch ((";............." + ";eigenvalues.." + ";eigenvectors."
         + ";asymmetric..." + ";symmetric...." + ";trace........"
         + ";haeberlen...." + ";eulerzyz....." + ";eulerzxz....."
-        + ";indices......" + ";type.........").indexOf(infoType) / 14) {
+        + ";quaternion..." + ";indices......" + ";type.........")
+        .indexOf(infoType) / 14) {
     case 1:
       return eigenValues;
     case 2:
@@ -159,14 +160,15 @@
           / (eigenValues[2] - haeb[0]));
       return haeb;
     case 7: // eulerzyz
-      return Quaternion.getQuaternionFrame(P3.new3(0, 0, 0),
-          eigenVectors[0], eigenVectors[1]).getEulerZYZ(); 
+      return ((Quaternion) getInfo("quaternion")).getEulerZYZ();
     case 8: // eulerzxz
-      return Quaternion.getQuaternionFrame(P3.new3(0, 0, 0),
-          eigenVectors[0], eigenVectors[1]).getEulerZXZ(); 
-    case 9: // 
+      return ((Quaternion) getInfo("quaternion")).getEulerZXZ();
+    case 9: // quaternion
+      return Quaternion.getQuaternionFrame(null, eigenVectors[0],
+          eigenVectors[1]);
+    case 10: // 
       return new int[] { modelIndex, atomIndex1, atomIndex2 };
-    case 10:
+    case 11:
       return type;
     default:
       return null;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to