File size: 5,972 Bytes
b40f1ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
export type CreaseType = 'mountain' | 'valley' | 'flat';

export interface CreaseDef {
  edge: [number, number];
  type: CreaseType;
}

export interface Pattern {
  id: string;
  name: string;
  vertices: [number, number][];
  faces: [number, number, number][];
  creases: CreaseDef[];
}

export const patterns: Pattern[] = [
  {
    id: 'simple',
    name: 'Simple Valley Fold',
    vertices: [
      [-1, 1], [1, 1],
      [-1, 0], [1, 0],
      [-1, -1], [1, -1]
    ],
    faces: [
      [0, 2, 3], [0, 3, 1],
      [2, 4, 5], [2, 5, 3]
    ],
    creases: [
      { edge: [2, 3], type: 'valley' }
    ]
  },
  {
    id: 'accordion',
    name: 'Accordion Fold',
    vertices: [
      [-1, 1], [-0.5, 1], [0, 1], [0.5, 1], [1, 1],
      [-1, -1], [-0.5, -1], [0, -1], [0.5, -1], [1, -1]
    ],
    faces: [
      [0, 1, 6], [0, 6, 5],
      [1, 2, 7], [1, 7, 6],
      [2, 3, 8], [2, 8, 7],
      [3, 4, 9], [3, 9, 8]
    ],
    creases: [
      { edge: [1, 6], type: 'valley' },
      { edge: [2, 7], type: 'mountain' },
      { edge: [3, 8], type: 'valley' }
    ]
  },
  {
    id: 'waterbomb',
    name: 'Waterbomb Base',
    vertices: [
      [-1, 1], [0, 1], [1, 1],
      [-1, 0], [0, 0], [1, 0],
      [-1, -1], [0, -1], [1, -1]
    ],
    faces: [
      [0, 1, 4], [1, 2, 4],
      [2, 5, 4], [5, 8, 4],
      [8, 7, 4], [7, 6, 4],
      [6, 3, 4], [3, 0, 4]
    ],
    creases: [
      { edge: [0, 4], type: 'valley' },
      { edge: [2, 4], type: 'valley' },
      { edge: [6, 4], type: 'valley' },
      { edge: [8, 4], type: 'valley' },
      { edge: [1, 4], type: 'mountain' },
      { edge: [3, 4], type: 'mountain' },
      { edge: [5, 4], type: 'mountain' },
      { edge: [7, 4], type: 'mountain' }
    ]
  },
  {
    id: 'preliminary',
    name: 'Preliminary Fold (Square Base)',
    vertices: [
      [-1, 1], [0, 1], [1, 1],
      [-1, 0], [0, 0], [1, 0],
      [-1, -1], [0, -1], [1, -1]
    ],
    faces: [
      [0, 1, 4], [1, 2, 4],
      [2, 5, 4], [5, 8, 4],
      [8, 7, 4], [7, 6, 4],
      [6, 3, 4], [3, 0, 4]
    ],
    creases: [
      { edge: [0, 4], type: 'mountain' },
      { edge: [2, 4], type: 'mountain' },
      { edge: [6, 4], type: 'mountain' },
      { edge: [8, 4], type: 'mountain' },
      { edge: [1, 4], type: 'valley' },
      { edge: [3, 4], type: 'valley' },
      { edge: [5, 4], type: 'valley' },
      { edge: [7, 4], type: 'valley' }
    ]
  },
  {
    id: 'miura',
    name: 'Miura-ori (2x2)',
    vertices: [
      [-1, 1], [0, 1.2], [1, 1],
      [-1, 0], [0, 0.2], [1, 0],
      [-1, -1], [0, -0.8], [1, -1]
    ],
    faces: [
      [0, 1, 4], [0, 4, 3],
      [1, 2, 5], [1, 5, 4],
      [3, 4, 7], [3, 7, 6],
      [4, 5, 8], [4, 8, 7]
    ],
    creases: [
      { edge: [1, 4], type: 'mountain' },
      { edge: [4, 7], type: 'mountain' },
      { edge: [3, 4], type: 'valley' },
      { edge: [4, 5], type: 'mountain' }
    ]
  },
  {
    id: 'bird_base',
    name: 'Bird Base',
    vertices: [
      [-1, 1], [0, 1], [1, 1],
      [-1, 0], [0, 0], [1, 0],
      [-1, -1], [0, -1], [1, -1],
      [-0.5, 0.5], [0.5, 0.5], [-0.5, -0.5], [0.5, -0.5]
    ],
    faces: [
      [0, 9, 3], [0, 1, 9], [1, 4, 9], [3, 9, 4],
      [1, 10, 4], [1, 2, 10], [2, 5, 10], [4, 10, 5],
      [3, 4, 11], [3, 11, 6], [6, 11, 7], [4, 7, 11],
      [4, 5, 12], [5, 8, 12], [8, 7, 12], [4, 12, 7]
    ],
    creases: [
      { edge: [1, 4], type: 'mountain' },
      { edge: [3, 4], type: 'mountain' },
      { edge: [5, 4], type: 'mountain' },
      { edge: [7, 4], type: 'mountain' },
      { edge: [0, 9], type: 'valley' },
      { edge: [9, 4], type: 'valley' },
      { edge: [2, 10], type: 'valley' },
      { edge: [10, 4], type: 'valley' },
      { edge: [6, 11], type: 'valley' },
      { edge: [11, 4], type: 'valley' },
      { edge: [8, 12], type: 'valley' },
      { edge: [12, 4], type: 'valley' },
      { edge: [1, 9], type: 'mountain' },
      { edge: [3, 9], type: 'mountain' },
      { edge: [1, 10], type: 'mountain' },
      { edge: [5, 10], type: 'mountain' },
      { edge: [3, 11], type: 'mountain' },
      { edge: [7, 11], type: 'mountain' },
      { edge: [5, 12], type: 'mountain' },
      { edge: [7, 12], type: 'mountain' }
    ]
  },
  {
    id: 'hypar',
    name: 'Hyperbolic Paraboloid',
    vertices: [
      [-1, 1], [-0.5, 1], [0, 1], [0.5, 1], [1, 1],
      [-1, 0.5], [-0.5, 0.5], [0, 0.5], [0.5, 0.5], [1, 0.5],
      [-1, 0], [-0.5, 0], [0, 0], [0.5, 0], [1, 0],
      [-1, -0.5], [-0.5, -0.5], [0, -0.5], [0.5, -0.5], [1, -0.5],
      [-1, -1], [-0.5, -1], [0, -1], [0.5, -1], [1, -1]
    ],
    faces: [
      [0, 1, 6], [0, 6, 5], [1, 2, 7], [1, 7, 6], [2, 3, 8], [2, 8, 7], [3, 4, 9], [3, 9, 8],
      [5, 6, 11], [5, 11, 10], [6, 7, 12], [6, 12, 11], [7, 8, 13], [7, 13, 12], [8, 9, 14], [8, 14, 13],
      [10, 11, 16], [10, 16, 15], [11, 12, 17], [11, 17, 16], [12, 13, 18], [12, 18, 17], [13, 14, 19], [13, 19, 18],
      [15, 16, 21], [15, 21, 20], [16, 17, 22], [16, 22, 21], [17, 18, 23], [17, 23, 22], [18, 19, 24], [18, 24, 23]
    ],
    creases: [
      { edge: [1, 6], type: 'mountain' }, { edge: [6, 11], type: 'mountain' }, { edge: [11, 16], type: 'mountain' }, { edge: [16, 21], type: 'mountain' },
      { edge: [2, 7], type: 'valley' }, { edge: [7, 12], type: 'valley' }, { edge: [12, 17], type: 'valley' }, { edge: [17, 22], type: 'valley' },
      { edge: [3, 8], type: 'mountain' }, { edge: [8, 13], type: 'mountain' }, { edge: [13, 18], type: 'mountain' }, { edge: [18, 23], type: 'mountain' },
      { edge: [5, 6], type: 'valley' }, { edge: [6, 7], type: 'valley' }, { edge: [7, 8], type: 'valley' }, { edge: [8, 9], type: 'valley' },
      { edge: [10, 11], type: 'mountain' }, { edge: [11, 12], type: 'mountain' }, { edge: [12, 13], type: 'mountain' }, { edge: [13, 14], type: 'mountain' },
      { edge: [15, 16], type: 'valley' }, { edge: [16, 17], type: 'valley' }, { edge: [17, 18], type: 'valley' }, { edge: [18, 19], type: 'valley' }
    ]
  }
];