diff options
| author | Simon Tatham <anakin@pobox.com> | 2011-05-06 17:09:03 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2011-05-06 17:09:03 +0000 |
| commit | 4a172274f2abde1c2ad23ba46b183e1d767fb902 (patch) | |
| tree | e8b39e62d938bb5a7e5a20fff144a88a42dea7a1 /penrose.c | |
| parent | 5619904bcc12427e88a05281872231f69f06180d (diff) | |
| download | puzzles-4a172274f2abde1c2ad23ba46b183e1d767fb902.zip puzzles-4a172274f2abde1c2ad23ba46b183e1d767fb902.tar.gz puzzles-4a172274f2abde1c2ad23ba46b183e1d767fb902.tar.bz2 puzzles-4a172274f2abde1c2ad23ba46b183e1d767fb902.tar.xz | |
Apply the rotation in Penrose grid descriptions by rotating in the
4-vector representation, rather than mucking about with sines and
cosines after grid generation. _Should_ make no difference in the
generated grids (there's a theoretical risk of an unlucky rounding
error just about managing to push some point in or out of bounds, but
I think it's vanishingly small), but simplifies the coordinate-
flattening procedure, and in particular increases its chance of
getting vertical lines actually vertical.
(Prior to this change, the game ID
10x10t12:G2554,-31,108_a3b12h0a212a3d102b2a23a2e3b01b0a2c2a0c0 was
generating a not-quite-vertical edge at top left, in the Java port but
not on Linux; I suspect differences in sin and cos as the cause of the
discrepancy. With the rotation done like this, the points'
x-coordinates are now computed without reference to their
y-coordinates.)
[originally from svn r9168]
Diffstat (limited to 'penrose.c')
| -rw-r--r-- | penrose.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -434,7 +434,7 @@ void penrose_count_tiles(int depth, int *nlarge, int *nsmall) * (later mail: this is an overestimate by about 5%) */ -int penrose(penrose_state *state, int which) +int penrose(penrose_state *state, int which, int angle) { vector vo = v_origin(); vector vb = v_origin(); @@ -444,6 +444,9 @@ int penrose(penrose_state *state, int which) vb.b = state->start_size; + vo = v_rotate(vo, angle); + vb = v_rotate(vb, angle); + if (which == PENROSE_P2) return penrose_p2_large(state, 0, 1, vo, vb); else |