Project

General

Profile

« Previous | Next » 

Revision 3feba94e

Added by Leszek Koltunski about 1 year ago

CU_323 solver: return to the old way of moving layers with a twist (we do not move the front layer, we move the middle and back layers to imitate this move and keep edge1 always in place)

View differences:

src/main/java/org/distorted/objectlib/tablebases/TablebasesAbstract.java
126 126
      }
127 127
    }
128 128

  
129
///////////////////////////////////////////////////////////////////////////////////////////////////
130

  
131
  int computeBitLayer(int ax, int layer)
132
    {
133
    return (1<<layer);
134
    }
135

  
129 136
///////////////////////////////////////////////////////////////////////////////////////////////////
130 137

  
131 138
  int computeRow(float[] pos, int quat, int axisIndex)
......
271 278
      for(int layer=0; layer<mNumLayers[ax]; layer++)
272 279
        {
273 280
        if( !mRotatable[ax][layer] ) continue;
274
        int bitLayer = (1<<layer);
281
        int bitLayer = computeBitLayer(ax,layer);
275 282
        int maxAngle = mAngles[ax][layer];
276 283

  
277 284
        for(int angle=1; angle<maxAngle; angle++ )
......
280 287
          int quat = quatBasis + angle;
281 288

  
282 289
          for(int cubit=0; cubit<mNumCubits; cubit++)
283
            if( mRotRow[cubit][ax]==bitLayer )
290
            if( (mRotRow[cubit][ax] & bitLayer) != 0 )
284 291
              {
285 292
              int currQuat = tmpQuats[cubit];
286 293
              int newQuat = getMultQuat(quat,currQuat);
......
393 400

  
394 401
///////////////////////////////////////////////////////////////////////////////////////////////////
395 402

  
396
  int[] newMove(int axis, int layer, int angle)
403
  int[] newMove(int ax, int layer, int angle)
397 404
    {
398
    int maxAngle = mAngles[axis][layer];
405
    int maxAngle = mAngles[ax][layer];
399 406
    angle = maxAngle-angle;
400 407
    if( angle> 0.5f*maxAngle ) angle -= maxAngle;
401 408

  
402
    return new int[] { axis, (1<<layer), angle };
409
    return new int[] { ax, computeBitLayer(ax,layer), angle };
403 410
    }
404 411

  
405 412
///////////////////////////////////////////////////////////////////////////////////////////////////
......
479 486

  
480 487
        if( mRotatable[ax][layer] )
481 488
          {
482
          int bitLayer = (1<<layer);
489
          int bitLayer = computeBitLayer(ax,layer);
483 490
          System.arraycopy(quats, 0, tmpQuats, 0, numQuats);
484 491

  
485 492
          for(int cubit=0; cubit<mNumCubits; cubit++)
486
            if( mRotRow[cubit][ax]==bitLayer )
493
            if( (mRotRow[cubit][ax] & bitLayer) != 0 )
487 494
              {
488 495
              int currQuat = tmpQuats[cubit];
489 496
              int newQuat = getMultQuat(quat,currQuat);
......
584 591

  
585 592
      if( mRotatable[ax][layer] )
586 593
        {
587
        int bitLayer = (1<<layer);
594
        int bitLayer = computeBitLayer(ax,layer);
588 595
        System.arraycopy(quats, 0, tmpQuats, 0, numQuats);
589 596

  
590 597
        for(int cubit=0; cubit<mNumCubits; cubit++)
591
          if( mRotRow[cubit][ax]==bitLayer )
598
          if( (mRotRow[cubit][ax] & bitLayer) != 0 )
592 599
            {
593 600
            int currQuat = tmpQuats[cubit];
594 601
            int newQuat = getMultQuat(quat,currQuat);

Also available in: Unified diff