diff options
Diffstat (limited to 'apps/plugins/puzzles/src/penrose-legacy.h')
-rw-r--r-- | apps/plugins/puzzles/src/penrose-legacy.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/apps/plugins/puzzles/src/penrose-legacy.h b/apps/plugins/puzzles/src/penrose-legacy.h new file mode 100644 index 0000000000..514fd8b592 --- /dev/null +++ b/apps/plugins/puzzles/src/penrose-legacy.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* penrose-legacy.h: legacy Penrose tiling functions. | ||
2 | * | ||
3 | * Provides an interface with which to generate Penrose tilings | ||
4 | * by recursive subdivision of an initial tile of choice (one of the | ||
5 | * four sets of two pairs kite/dart, or thin/thick rhombus). | ||
6 | * | ||
7 | * You supply a callback function and a context pointer, which is | ||
8 | * called with each tile in turn: you choose how many times to recurse. | ||
9 | * | ||
10 | * This method of generating Penrose tiling fragments is superseded by | ||
11 | * the completely different algorithm in penrose.c. We keep the legacy | ||
12 | * algorithm around only for interpreting Loopy game IDs generated by | ||
13 | * older versions of the code. | ||
14 | */ | ||
15 | |||
16 | #ifndef PUZZLES_PENROSE_LEGACY_H | ||
17 | #define PUZZLES_PENROSE_LEGACY_H | ||
18 | |||
19 | #ifndef PHI | ||
20 | #define PHI 1.6180339887 | ||
21 | #endif | ||
22 | |||
23 | typedef struct vector vector; | ||
24 | |||
25 | double penrose_legacy_vx(vector *vs, int i); | ||
26 | double penrose_legacy_vy(vector *vs, int i); | ||
27 | |||
28 | typedef struct penrose_legacy_state penrose_legacy_state; | ||
29 | |||
30 | /* Return non-zero to clip the tree here (i.e. not recurse | ||
31 | * below this tile). | ||
32 | * | ||
33 | * Parameters are state, vector array, npoints, depth. | ||
34 | * ctx is inside state. | ||
35 | */ | ||
36 | typedef int (*tile_callback)(penrose_legacy_state *, vector *, int, int); | ||
37 | |||
38 | struct penrose_legacy_state { | ||
39 | int start_size; /* initial side length */ | ||
40 | int max_depth; /* Recursion depth */ | ||
41 | |||
42 | tile_callback new_tile; | ||
43 | void *ctx; /* for callback */ | ||
44 | }; | ||
45 | |||
46 | #ifndef PENROSE_ENUM_DEFINED | ||
47 | #define PENROSE_ENUM_DEFINED | ||
48 | enum { PENROSE_P2, PENROSE_P3 }; | ||
49 | #endif | ||
50 | |||
51 | extern int penrose_legacy(penrose_legacy_state *state, int which, int angle); | ||
52 | |||
53 | /* Returns the side-length of a penrose tile at recursion level | ||
54 | * gen, given a starting side length. */ | ||
55 | extern double penrose_legacy_side_length(double start_size, int depth); | ||
56 | |||
57 | /* Calculate start size and recursion depth required to produce a | ||
58 | * width-by-height sized patch of penrose tiles with the given tilesize */ | ||
59 | extern void penrose_legacy_calculate_size( | ||
60 | int which, int tilesize, int w, int h, | ||
61 | double *required_radius, int *start_size, int *depth); | ||
62 | |||
63 | #endif | ||