Advertisement
Guest User

Untitled

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