Project

General

Profile

Download (4.76 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / helpers / FactoryBandagedPyraminx.java @ c7c72305

1 a7c10d03 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2 4a9f01f9 leszek
// Copyright 2023 Leszek Koltunski                                                               //
3 a7c10d03 Leszek Koltunski
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 a7a40b3c Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 a7c10d03 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objectlib.helpers;
11
12 36d67a7e leszek
import static org.distorted.objectlib.main.TwistyObject.SQ3;
13 4a9f01f9 leszek
import static org.distorted.objectlib.main.TwistyObject.SQ6;
14 a7c10d03 Leszek Koltunski
15 786098dd Leszek Koltunski
import org.distorted.library.type.Static3D;
16 4a9f01f9 leszek
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
17 12aa6192 Leszek Koltunski
18 786098dd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 4a9f01f9 leszek
public class FactoryBandagedPyraminx extends FactoryBandaged
21 a7c10d03 Leszek Koltunski
  {
22 c18507d9 Leszek Koltunski
  private static FactoryBandagedPyraminx mThis;
23 a7c10d03 Leszek Koltunski
24
///////////////////////////////////////////////////////////////////////////////////////////////////
25
26 c18507d9 Leszek Koltunski
  private FactoryBandagedPyraminx()
27 a7c10d03 Leszek Koltunski
    {
28 b1f0d55d Leszek Koltunski
29 a7c10d03 Leszek Koltunski
    }
30
31 c7c72305 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
32
// TODO
33
34
  public float[] elementVertices(int ax, boolean left, int element)
35
    {
36
    return null;
37
    }
38
39 a7c10d03 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
40 4a9f01f9 leszek
// (vertices,indices) define a cubit face. Return its 'diameter', i.e. max distance between vertices.
41 a7c10d03 Leszek Koltunski
42 4a9f01f9 leszek
  float faceDiameter(float[][] vertices, int[][] indices)
43 786098dd Leszek Koltunski
    {
44 4a9f01f9 leszek
    /*
45 b1f0d55d Leszek Koltunski
    float maxX = -dX;
46 84a17011 Leszek Koltunski
    float minX =  dX;
47 b1f0d55d Leszek Koltunski
    float maxY = -dY;
48 84a17011 Leszek Koltunski
    float minY =  dY;
49 b1f0d55d Leszek Koltunski
    float maxZ = -dZ;
50 84a17011 Leszek Koltunski
    float minZ =  dZ;
51 786098dd Leszek Koltunski
52 4a9f01f9 leszek
    for (int[] ind : indices)
53
      for(int index : ind)
54 786098dd Leszek Koltunski
        {
55 4a9f01f9 leszek
        float[] v = vertices[index];
56 e3302253 Leszek Koltunski
57 4a9f01f9 leszek
        if (v[0] > maxX) maxX = v[0];
58
        if (v[0] < minX) minX = v[0];
59
        if (v[1] > maxY) maxY = v[1];
60
        if (v[1] < minY) minY = v[1];
61
        if (v[2] > maxZ) maxZ = v[2];
62
        if (v[2] < minZ) minZ = v[2];
63 786098dd Leszek Koltunski
        }
64
65 4a9f01f9 leszek
    float diffX = maxX-minX;
66
    float diffY = maxY-minY;
67
    float diffZ = maxZ-minZ;
68 5987822f Leszek Koltunski
69 4a9f01f9 leszek
    return diffX>diffY ? Math.max(diffX,diffZ) : Math.max(diffY,diffZ);
70 5987822f Leszek Koltunski
71 4a9f01f9 leszek
     */
72
    return 0;
73 5987822f Leszek Koltunski
    }
74
75
///////////////////////////////////////////////////////////////////////////////////////////////////
76 4a9f01f9 leszek
// PUBLIC API
77 5987822f Leszek Koltunski
78 4a9f01f9 leszek
  public static FactoryBandagedPyraminx getInstance()
79 a7c10d03 Leszek Koltunski
    {
80 4a9f01f9 leszek
    if( mThis==null ) mThis = new FactoryBandagedPyraminx();
81
    return mThis;
82 5987822f Leszek Koltunski
    }
83
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85
86 4a9f01f9 leszek
  public float[][] getCuts(int[] numLayers)
87 5987822f Leszek Koltunski
    {
88 4a9f01f9 leszek
    int numL = numLayers[0];
89
    float[][] ret = new float[4][numL-1];
90 5987822f Leszek Koltunski
91 4a9f01f9 leszek
    for(int i=0; i<numL-1; i++)
92 5987822f Leszek Koltunski
      {
93 4a9f01f9 leszek
      float cut = (1.0f+i-numL/4.0f)*(SQ6/3);
94
      ret[0][i] = cut;
95
      ret[1][i] = cut;
96
      ret[2][i] = cut;
97
      ret[3][i] = cut;
98 5987822f Leszek Koltunski
      }
99 a7c10d03 Leszek Koltunski
100 4a9f01f9 leszek
    return ret;
101 a7c10d03 Leszek Koltunski
    }
102
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105 4a9f01f9 leszek
  public Static3D[] getNormals()
106 a7c10d03 Leszek Koltunski
    {
107 4a9f01f9 leszek
    return TouchControlTetrahedron.FACE_AXIS;
108 a7c10d03 Leszek Koltunski
    }
109
110 36d67a7e leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
111
112
  public float[][] getRotAxis()
113
    {
114
    return new float[][]
115
            {
116
                    {     0, SQ3/3, SQ6/3 },
117
                    {     0, SQ3/3,-SQ6/3 },
118
                    {-SQ6/3,-SQ3/3,     0 },
119
                    { SQ6/3,-SQ3/3,     0 },
120
            };
121
    }
122
123 a7c10d03 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
124
125 4a9f01f9 leszek
  public float[] getDist3D()
126 a7c10d03 Leszek Koltunski
    {
127 4a9f01f9 leszek
    return TouchControlTetrahedron.D3D;
128 b8b71f52 Leszek Koltunski
    }
129
130 a7c10d03 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
131
132 4a9f01f9 leszek
  public float[][] getBands(boolean iconMode)
133 a7c10d03 Leszek Koltunski
    {
134 84a17011 Leszek Koltunski
    float height= iconMode ? 0.001f : 0.048f;
135 4a9f01f9 leszek
    int[] angle = {60,50,40,32,28,23};
136 84a17011 Leszek Koltunski
    float R     = 0.2f;
137
    float S     = 0.5f;
138
    int extraI  = 0;
139
    int extraV  = 0;
140 a7c10d03 Leszek Koltunski
141 4a9f01f9 leszek
    int numVertA= mNumLayers[0]>=5 ? 3 : (mNumLayers[0]==4 ? 4:5);
142
    int numVertI= mNumLayers[0]>=5 ? 2 : 3;
143 a7c10d03 Leszek Koltunski
144 4a9f01f9 leszek
    return new float[][] { {  0.001f,angle[0],R,S,numVertI,extraV,extraI},
145
            {height  ,angle[1],R,S,numVertA,extraV,extraI},
146
            {height/2,angle[2],R,S,numVertA,extraV,extraI},
147
            {height/3,angle[3],R,S,numVertA,extraV,extraI},
148
            {height/4,angle[4],R,S,numVertA,extraV,extraI},
149
            {height/5,angle[5],R,S,numVertA,extraV,extraI} };
150 a7c10d03 Leszek Koltunski
    }
151
  }