Project

General

Profile

« Previous | Next » 

Revision 12313693

Added by Leszek Koltunski over 3 years ago

Progress with the Kilominx movement (still not working)

View differences:

src/main/java/org/distorted/objects/MovementMinx.java
20 20
package org.distorted.objects;
21 21

  
22 22
import org.distorted.library.type.Static3D;
23
import static org.distorted.objects.TwistyMinx.C1;
24
import static org.distorted.objects.TwistyMinx.C2;
25
import static org.distorted.objects.TwistyMinx.LEN;
26
import static org.distorted.objects.FactoryCubit.SIN54;
27
import static org.distorted.objects.FactoryCubit.COS54;
28
import static org.distorted.objects.TwistyObject.SQ5;
23 29

  
24 30
///////////////////////////////////////////////////////////////////////////////////////////////////
25 31

  
26 32
class MovementMinx extends Movement
27 33
{
28
  static final float DIST3D = 0.25f;
29
  static final float DIST2D = 0.25f;
34
  static final float DIST3D = (float)Math.sqrt(0.625f+0.275f*SQ5)/3;
35
  static final float DIST2D = (0.5f*SIN54/COS54)/3;
30 36

  
31 37
  static final Static3D[] FACE_AXIS = new Static3D[]
32 38
         {
33
           new Static3D(1,0,0), new Static3D(-1,0,0),
34
           new Static3D(0,1,0), new Static3D(0,-1,0),
35
           new Static3D(0,0,1), new Static3D(0,0,-1)
39
           new Static3D( C2/LEN, C1/LEN, 0      ),
40
           new Static3D( C2/LEN,-C1/LEN, 0      ),
41
           new Static3D(-C2/LEN, C1/LEN, 0      ),
42
           new Static3D(-C2/LEN,-C1/LEN, 0      ),
43
           new Static3D( 0     , C2/LEN, C1/LEN ),
44
           new Static3D( 0     , C2/LEN,-C1/LEN ),
45
           new Static3D( 0     ,-C2/LEN, C1/LEN ),
46
           new Static3D( 0     ,-C2/LEN,-C1/LEN ),
47
           new Static3D( C1/LEN, 0     , C2/LEN ),
48
           new Static3D( C1/LEN, 0     ,-C2/LEN ),
49
           new Static3D(-C1/LEN, 0     , C2/LEN ),
50
           new Static3D(-C1/LEN, 0     ,-C2/LEN )
36 51
         };
37 52

  
38 53
///////////////////////////////////////////////////////////////////////////////////////////////////
......
46 61

  
47 62
  int computeRowFromOffset(int face, int size, float offset)
48 63
    {
49
    return offset<DIST2D ? 0:1;
64
    return offset<DIST2D ? 0:2;
50 65
    }
51 66

  
52 67
///////////////////////////////////////////////////////////////////////////////////////////////////
......
57 72
    }
58 73

  
59 74
///////////////////////////////////////////////////////////////////////////////////////////////////
60
// faces 0,1,2,3  --> /
61
// faces 4,5      --> \
62

  
63
  private boolean isTopHalf(int face, float[] touchPoint)
64
    {
65
    if( face==4 || face==5 ) return touchPoint[1] >=-touchPoint[0];
66
    else                     return touchPoint[1] >= touchPoint[0];
67
    }
68

  
69
///////////////////////////////////////////////////////////////////////////////////////////////////
75
// TODO; approximation
70 76

  
71 77
  boolean isInsideFace(int face, float[] p)
72 78
    {
73
    return ( p[0]<=DIST2D && p[0]>=-DIST2D && p[1]<=DIST2D && p[1]>=-DIST2D );
79
    return ( p[0]*p[0] + p[1]*p[1] <= 1/(4*COS54*COS54) );
74 80
    }
75 81

  
76 82
///////////////////////////////////////////////////////////////////////////////////////////////////
77
// 0 +++
78
// 1 ++-
79
// 2 +-+
80
// 3 +--
81 83

  
82 84
  void computeEnabledAxis(int face, float[] touchPoint, int[] enabled)
83 85
    {
84
    enabled[0] = 1;
85

  
86
    boolean isTop = isTopHalf(face,touchPoint);
86
    enabled[0] = 5;
87 87

  
88 88
    switch(face)
89 89
      {
90
      case 0: enabled[1] = isTop ? 0:3; break;
91
      case 1: enabled[1] = isTop ? 2:1; break;
92
      case 2: enabled[1] = isTop ? 2:0; break;
93
      case 3: enabled[1] = isTop ? 1:3; break;
94
      case 4: enabled[1] = isTop ? 0:1; break;
95
      case 5: enabled[1] = isTop ? 2:3; break;
90
      case  0:
91
      case  3:  enabled[1]=1; enabled[2]=2; enabled[3]=3; enabled[4]=4; enabled[5]=5; break;
92
      case  1:
93
      case  2:  enabled[1]=0; enabled[2]=2; enabled[3]=3; enabled[4]=4; enabled[5]=5; break;
94
      case  4:
95
      case  7:  enabled[1]=0; enabled[2]=1; enabled[3]=3; enabled[4]=4; enabled[5]=5; break;
96
      case  5:
97
      case  6:  enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=4; enabled[5]=5; break;
98
      case  8:
99
      case 11:  enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=3; enabled[5]=5; break;
100
      case  9:
101
      case 10:  enabled[1]=0; enabled[2]=1; enabled[3]=2; enabled[4]=3; enabled[5]=4; break;
96 102
      }
97 103
    }
98 104
}

Also available in: Unified diff