added comments explaining the puzzle generation code

master
Simon Pirkelmann 2019-09-13 17:23:54 +02:00
parent 441d733935
commit 7d828f5fbf
1 changed files with 18 additions and 16 deletions

View File

@ -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]])