Project

General

Profile

« Previous | Next » 

Revision eb389a97

Added by Leszek Koltunski about 4 years ago

Move computation of the rotation rows to the Object from Cubits.

View differences:

src/main/java/org/distorted/objects/Cubit.java
36 36
  private int mNumAxis;
37 37

  
38 38
  int mQuatIndex;
39
  float[] mRotationRow;
39
  int[] mRotationRow;
40 40

  
41 41
///////////////////////////////////////////////////////////////////////////////////////////////////
42 42

  
......
52 52
    mQuatIndex       = 0;
53 53

  
54 54
    mNumAxis     = mParent.ROTATION_AXIS.length;
55
    mRotationRow = new float[mNumAxis];
55
    mRotationRow = new int[mNumAxis];
56 56
    computeRotationRow();
57 57
    }
58 58

  
......
111 111
    }
112 112

  
113 113
///////////////////////////////////////////////////////////////////////////////////////////////////
114
// cast current position on axis; use mStart and mStep to compute the rotation row for each axis.
115 114

  
116 115
  private void computeRotationRow()
117 116
    {
118
    float tmp;
119
    Static3D axis;
120 117
    float x = mCurrentPosition.get0();
121 118
    float y = mCurrentPosition.get1();
122 119
    float z = mCurrentPosition.get2();
123 120

  
124 121
    for(int i=0; i<mNumAxis; i++)
125 122
      {
126
      axis = mParent.ROTATION_AXIS[i];
127
      tmp = x*axis.get0() + y*axis.get1() + z*axis.get2();
128
      mRotationRow[i] = (tmp-mParent.mStart)/mParent.mStep;
123
      mRotationRow[i] = mParent.computeRow(x,y,z,i);
129 124
      }
130 125
    }
131 126

  
......
161 156

  
162 157
  int computeAssociation()
163 158
    {
164
    int row, result = 0, accumulativeShift = 0;
159
    int result = 0, accumulativeShift = 0;
165 160

  
166 161
    for(int axis=0; axis<mNumAxis; axis++)
167 162
      {
168
      row = (int)(mRotationRow[axis]+0.5f);
169
      result += (1<<(row+accumulativeShift));
163
      result += (1<<(mRotationRow[axis]+accumulativeShift));
170 164
      accumulativeShift += ObjectList.MAX_OBJECT_SIZE;
171 165
      }
172 166

  
src/main/java/org/distorted/objects/TwistyCube.java
331 331
               Static4D rotated1 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat1 );
332 332
               Static4D rotated2 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat2 );
333 333

  
334
               float row1, row2, row3, row4;
335
               float ax,ay,az;
336
               Static3D axis;
334
               float row1, row2;
337 335
               float x1 = rotated1.get0();
338 336
               float y1 = rotated1.get1();
339 337
               float z1 = rotated1.get2();
......
343 341

  
344 342
               for(int i=0; i<NUM_AXIS; i++)
345 343
                 {
346
                 axis = ROTATION_AXIS[i];
347
                 ax = axis.get0();
348
                 ay = axis.get1();
349
                 az = axis.get2();
350

  
351
                 row1 = ((x1*ax + y1*ay + z1*az) - mStart) / mStep;
352
                 row2 = ((x2*ax + y2*ay + z2*az) - mStart) / mStep;
353
                 row3 = row1 - size;
354
                 row4 = row2 - size;
355

  
356
                 if( (row1<MAX_ERROR && row1>-MAX_ERROR && row2<MAX_ERROR && row2>-MAX_ERROR) ||
357
                     (row3<MAX_ERROR && row3>-MAX_ERROR && row4<MAX_ERROR && row4>-MAX_ERROR)  )
358
                   {
359
                   return true;
360
                   }
344
                 row1 = computeRow(x1,y1,z1,i);
345
                 row2 = computeRow(x2,y2,z2,i);
346

  
347
                 if( (row1==0 && row2==0) || (row1==size || row2==size) ) return true;
361 348
                 }
362 349
               return false;
363 350

  
src/main/java/org/distorted/objects/TwistyObject.java
106 106
  private Dynamic1D mRotationAngle;
107 107
  private Static3D mRotationAxis;
108 108
  private Static3D mObjectScale;
109
  private float mStart, mStep;
109 110

  
110
  float mStart, mStep;
111 111
  float[] mRowChances;
112

  
113 112
  Static1D mRotationAngleStatic, mRotationAngleMiddle, mRotationAngleFinal;
114 113
  DistortedTexture mTexture;
115

  
116 114
  MatrixEffectScale mScaleEffect;
117 115
  MatrixEffectQuaternion mQuatEffect;
118 116

  
......
299 297
    return ((1<<cubitRow)&rowBitmap)!=0;
300 298
    }
301 299

  
300
///////////////////////////////////////////////////////////////////////////////////////////////////
301

  
302
  int computeRow(float x, float y, float z, int rotIndex)
303
    {
304
    Static3D axis = ROTATION_AXIS[rotIndex];
305
    float tmp = x*axis.get0() + y*axis.get1() + z*axis.get2();
306

  
307
    return (int)((tmp-mStart)/mStep +0.5f);
308
    }
309

  
302 310
///////////////////////////////////////////////////////////////////////////////////////////////////
303 311
// note the minus in front of the sin() - we rotate counterclockwise
304 312
// when looking towards the direction where the axis increases in values.
src/main/java/org/distorted/objects/TwistyPyraminx.java
365 365
               Static4D rotated1 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat1 );
366 366
               Static4D rotated2 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat2 );
367 367

  
368
               float row1, row2, row3, row4;
369
               float ax,ay,az;
370
               Static3D axis;
368
               float row1, row2;
371 369
               float x1 = rotated1.get0();
372 370
               float y1 = rotated1.get1();
373 371
               float z1 = rotated1.get2();
......
377 375

  
378 376
               for(int i=0; i<NUM_AXIS; i++)
379 377
                 {
380
                 axis = ROTATION_AXIS[i];
381
                 ax = axis.get0();
382
                 ay = axis.get1();
383
                 az = axis.get2();
384

  
385
                 row1 = ((x1*ax + y1*ay + z1*az) - mStart) / mStep;
386
                 row2 = ((x2*ax + y2*ay + z2*az) - mStart) / mStep;
387
                 row3 = row1 - size;
388
                 row4 = row2 - size;
389

  
390
                 if( (row1<MAX_ERROR && row1>-MAX_ERROR && row2<MAX_ERROR && row2>-MAX_ERROR) ||
391
                     (row3<MAX_ERROR && row3>-MAX_ERROR && row4<MAX_ERROR && row4>-MAX_ERROR)  )
392
                   {
393
                   return true;
394
                   }
378
                 row1 = computeRow(x1,y1,z1,i);
379
                 row2 = computeRow(x2,y2,z2,i);
380

  
381
                 if( (row1==0 && row2==0) || (row1==size || row2==size) ) return true;
395 382
                 }
396 383
               return false;
397 384

  
src/main/java/org/distorted/states/RubikStatePlay.java
573 573

  
574 574
  public void restorePreferences(SharedPreferences preferences)
575 575
    {
576
    mObject     = preferences.getInt("statePlay_object", DEF_OBJECT);
577
    mSize       = preferences.getInt("statePlay_size"  , DEF_SIZE  );
576
    mObject= preferences.getInt("statePlay_object", DEF_OBJECT);
577
    mSize  = preferences.getInt("statePlay_size"  , DEF_SIZE  );
578 578
    }
579 579

  
580 580
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff