Advertisement
Guest User

Untitled

a guest
May 21st, 2015
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.56 KB | None | 0 0
  1. import com.jme3.math.FastMath;
  2. import com.jme3.math.Quaternion;
  3. import com.jme3.math.Vector3f;
  4.  
  5. public class PerformanceTest {
  6.     static class QV {
  7.         float x, y, z, w;
  8.         Vector3f v;
  9.         public QV(Quaternion q, Vector3f v) {
  10.             x = q.getX(); y = q.getY(); z = q.getZ(); w = q.getW();
  11.             this.v = v;
  12.         }
  13.         public void mult15(Vector3f store) {
  14.             Vector3f v = this.v;
  15.             float vx = y*v.z-z*v.y;
  16.             float vy = z*v.x-x*v.z;
  17.             float vz = x*v.y-y*v.x;
  18.             vx += vx; vy += vy; vz += vz;
  19.             store.x = v.x + w*vx + y*vz-z*vy;
  20.             store.y = v.y + w*vy + z*vx-x*vz;
  21.             store.z = v.z + w*vz + x*vy-y*vx;
  22.         }
  23.         public void mult60(Vector3f store) {
  24.             Vector3f v = this.v;
  25.             float vx = v.x, vy = v.y, vz = v.z;
  26.             store.x = w * w * vx + 2 * y * w * vz - 2 * z * w * vy + x * x
  27.                     * vx + 2 * y * x * vy + 2 * z * x * vz - z * z * vx - y
  28.                     * y * vx;
  29.             store.y = 2 * x * y * vx + y * y * vy + 2 * z * y * vz + 2 * w
  30.                     * z * vx - z * z * vy + w * w * vy - 2 * x * w * vz - x
  31.                     * x * vy;
  32.             store.z = 2 * x * z * vx + 2 * y * z * vy + z * z * vz - 2 * w
  33.                     * y * vx - y * y * vz + 2 * w * x * vy - x * x * vz + w
  34.                     * w * vz;
  35.         }
  36.     }
  37.     public static void main(String[] args) {
  38.         Quaternion q = new Quaternion();
  39.         Vector3f store = new Vector3f();
  40.  
  41.         int items = 100000;
  42.         int tests = 100;
  43.         int reps = 5;
  44.         QV[] qv = new QV[items];
  45.         for(int i = 0; i < items; i++) {
  46.             Vector3f v = new Vector3f();
  47.             q.fromAngleNormalAxis(FastMath.PI*FastMath.nextRandomFloat(),
  48.                     new Vector3f(2*FastMath.nextRandomFloat()-1f,
  49.                     2*FastMath.nextRandomFloat()-1f,
  50.                     2*FastMath.nextRandomFloat()-1f).normalizeLocal());
  51.             v.set(FastMath.nextRandomFloat()*10000f,
  52.                     FastMath.nextRandomFloat()*10000f,
  53.                     FastMath.nextRandomFloat()*10000f);
  54.             qv[i] = new QV(q, v);
  55.         }
  56.         float vx, vy, vz;
  57.         float x,y,z,w;
  58.        
  59.         Vector3f a = new Vector3f();
  60.         System.out.println("Test");
  61.         //dry run
  62.         long millis = System.currentTimeMillis();
  63.         for(int i = 0; i < items; i++) {
  64.             qv[i].mult15(store);
  65.             a.addLocal(store);
  66.         }
  67.         for(int i = 0; i < items; i++) {
  68.             qv[i].mult60(store);
  69.             a.addLocal(store);
  70.         }        
  71.         //test
  72.         for(int r = 0; r < reps; r++) {
  73.             millis = System.currentTimeMillis();
  74.             for (int j = 0; j < tests; j++) {
  75.                 for (int i = 0; i < items; i++) {
  76.                     qv[i].mult15(store);
  77. //                    x = qv[i].x;y = qv[i].y;z = qv[i].z;w = qv[i].w;
  78. //                    Vector3f v = qv[i].v;
  79. //                    vx = y*v.z-z*v.y;
  80. //                    vy = z*v.x-x*v.z;
  81. //                    vz = x*v.y-y*v.x;
  82. //                    vx += vx; vy += vy; vz += vz;
  83. //                    store.x = v.x + w*vx + y*vz-z*vy;
  84. //                    store.y = v.y + w*vy + z*vx-x*vz;
  85. //                    store.z = v.z + w*vz + x*vy-y*vx;
  86.                 }
  87.             }
  88.             millis = System.currentTimeMillis() - millis;
  89.             System.out.println("15:" + millis);
  90.             millis = System.currentTimeMillis();
  91.             for (int j = 0; j < tests; j++) {
  92.                 for (int i = 0; i < items; i++) {
  93.                     qv[i].mult60(store);
  94. //                    x = qv[i].x;y = qv[i].y;z = qv[i].z;w = qv[i].w;
  95. //                    Vector3f v = qv[i].v;
  96. //                    vx = v.x; vy = v.y; vz = v.z;
  97. //                    store.x = w * w * vx + 2 * y * w * vz - 2 * z * w * vy + x * x
  98. //                    * vx + 2 * y * x * vy + 2 * z * x * vz - z * z * vx - y
  99. //                    * y * vx;
  100. //                    store.y = 2 * x * y * vx + y * y * vy + 2 * z * y * vz + 2 * w
  101. //                    * z * vx - z * z * vy + w * w * vy - 2 * x * w * vz - x
  102. //                    * x * vy;
  103. //                    store.z = 2 * x * z * vx + 2 * y * z * vy + z * z * vz - 2 * w
  104. //                    * y * vx - y * y * vz + 2 * w * x * vy - x * x * vz + w
  105. //                    * w * vz;
  106.                 }
  107.             }
  108.             millis = System.currentTimeMillis() - millis;
  109.             System.out.println("60:" + millis);
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement