initial commit
This commit is contained in:
101
python/img_gen/qr_plcmt_path.py
Normal file
101
python/img_gen/qr_plcmt_path.py
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Generates QR Code placement path figure
|
||||
|
||||
(C) 2022 Louis Heredero louis.heredero@edu.vs.ch
|
||||
"""
|
||||
|
||||
import pygame
|
||||
import numpy as np
|
||||
|
||||
WIDTH, HEIGHT = 580, 580
|
||||
|
||||
matrix = np.array([
|
||||
[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
|
||||
[ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0],
|
||||
[ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
|
||||
[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
|
||||
[ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 1.0, -0.5, -0.5, -1.0, -1.0, -1.0, -1.0, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5],
|
||||
[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
|
||||
[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, -0.5, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]
|
||||
])
|
||||
|
||||
if __name__ == "__main__":
|
||||
pygame.init()
|
||||
|
||||
surf = pygame.Surface([WIDTH, HEIGHT])
|
||||
W, H = WIDTH/(matrix.shape[1]+8), HEIGHT/(matrix.shape[0]+8)
|
||||
hW, hH = W/2, H/2
|
||||
|
||||
surf.fill((255,255,255))
|
||||
|
||||
m = ((matrix.copy()+2)%3)*127
|
||||
mat = np.ones((m.shape[0]+8, m.shape[1]+8))*255
|
||||
mat[4:-4, 4:-4] = m
|
||||
|
||||
for y in range(mat.shape[0]):
|
||||
for x in range(mat.shape[1]):
|
||||
col = mat[y, x]
|
||||
col = (col, col, col)
|
||||
pygame.draw.rect(surf, col, [x*W, y*H, W, H])
|
||||
|
||||
points = []
|
||||
all_points = []
|
||||
|
||||
#Place data
|
||||
dir_ = -1 #-1 = up | 1 = down
|
||||
x, y = matrix.shape[1]-1, matrix.shape[0]-1
|
||||
zigzag = 0
|
||||
|
||||
while x >= 0:
|
||||
all_points.append([(x+4)*W+hW, (y+4)*H+hH])
|
||||
if matrix[y,x] == -1:
|
||||
points.append([(x+4)*W+hW, (y+4)*H+hH])
|
||||
|
||||
if ((dir_+1)/2 + zigzag)%2 == 0:
|
||||
x -= 1
|
||||
|
||||
else:
|
||||
y += dir_
|
||||
x += 1
|
||||
|
||||
if y == -1 or y == matrix.shape[0]:
|
||||
all_points.append([(x+4)*W+hW, (y+4)*H+hH])
|
||||
dir_ = -dir_
|
||||
y += dir_
|
||||
x -= 2
|
||||
|
||||
else:
|
||||
zigzag = 1-zigzag
|
||||
|
||||
#Vertical timing pattern
|
||||
if x == 6:
|
||||
x -= 1
|
||||
all_points.append([(x+4)*W+hW, (y+4)*H+hH])
|
||||
|
||||
for p in all_points:
|
||||
pygame.draw.circle(surf, (255,0,0), p, 3)
|
||||
|
||||
pygame.draw.lines(surf, (255,0,0), False, all_points)
|
||||
|
||||
|
||||
for p in points:
|
||||
pygame.draw.circle(surf, (255,255,255), p, 3)
|
||||
|
||||
pygame.draw.lines(surf, (255,255,255), False, points)
|
||||
pygame.image.save(surf, "qr_plcmt_path.png")
|
||||
Reference in New Issue
Block a user