diff --git a/prototype/circles.py b/prototype/circles.py index f4cbffb..322b670 100644 --- a/prototype/circles.py +++ b/prototype/circles.py @@ -64,30 +64,32 @@ def svg_puzzle(p, size, angle): return text def svg_line_puzzle(start, end, puzzle_scale=1.0, linewidth=0.50): - v = end - start - dist = np.linalg.norm(v) - size = dist / 10.0 * puzzle_scale - v = v / dist - angle = math.atan2(v[1], v[0]) - - p = np.mean([start, end], axis=0) - + # draws a line from start to end with a simple jigsaw puzzle style cutout in the middle + # the size of the cutout can be controlled with the puzzle_scale parameter # compute points """ v1 and v2 are orthogonal vectors - construction of points (starting at p): + construction of points (starting at p (middle between start and end)): - p3 <------ -2 v1 ------ p2 - ^ - | - v2 - | - | - p4 <-- -v1 -- p -- v1 --> p1 + p2 ------- 2 v1 -----> p3 + ^ + | + v2 + | + | + start --- p1 <-- -v1 -- p -- v1 --> p4 --- end then between points p2 and p3 with draw an arc """ + v = end - start + dist = np.linalg.norm(v) + size = dist / 10.0 * puzzle_scale # size of the cutout + v = v / dist + angle = math.atan2(v[1], v[0]) # angle of v + + # midpoint between start and end + p = np.mean([start, end], axis=0) v1 = np.array([np.cos(angle), np.sin(angle)]) v2 = np.array([v1[1], -v1[0]])