1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
INSERT OR REPLACE INTO videos (id, width, height, fps) VALUES ('spiral', 400, 400, 20) RETURNING id;
WITH RECURSIVE
video AS (SELECT * FROM videos WHERE id = 'spiral'),
frames(frame) AS
(SELECT 1 UNION ALL
SELECT frame + 1 FROM frames, video WHERE frame < 60)
INSERT INTO images (id, width, height, frame, video_id)
SELECT CONCAT('spiral/', frame), width, height, frame, 'spiral'
FROM frames, video;
WITH RECURSIVE
video AS
(SELECT * FROM videos WHERE id = 'spiral'),
horizontal(x) AS
(SELECT width FROM video UNION ALL SELECT x - 1 FROM horizontal WHERE x > 1),
vertical(y) AS
(SELECT height FROM video UNION ALL SELECT y - 1 FROM vertical WHERE y > 1),
frames(id, frame) AS
(SELECT id, frame FROM images WHERE video_id = (SELECT id FROM video)),
theta_increments(inc) AS
(SELECT -14 UNION ALL SELECT inc + 1 FROM theta_increments WHERE inc < 14),
theta_increments_2(inc) AS
(SELECT -14.5 UNION ALL SELECT * FROM theta_increments UNION ALL SELECT 14.5),
_pixels(frame_id, x, y, r, g, b) AS
(SELECT
frame_id,
x, y,
MIN(255, ROUND(50.0 * value + 15)),
MIN(255, ROUND(200.0 * value*value*value) + 15),
MIN(255, ROUND(200.0 * value*value*value) + 8)
FROM (SELECT *,
frames.id AS frame_id,
(WITH
coords AS (SELECT
(x - width/2.0)/100.0 AS xval,
(y - height/2.0)/100.0 AS yval),
theta AS (SELECT
(CASE WHEN xval = 0 THEN PI()/2 ELSE ATAN(yval/xval) END) AS theta,
(0.05 * frame) / (SELECT COUNT(*) FROM frames) + 0.2 AS factor,
1.5 AS scale,
0.06 AS thicc
FROM coords),
deltas AS (SELECT
SQRT(
POW(scale*SIN(factor*(theta + inc*PI()))*COS((theta + inc*PI())) - xval, 2) +
POW(scale*SIN(factor*(theta + inc*PI()))*SIN((theta + inc*PI())) - yval, 2)
) AS delta
FROM theta, coords, theta_increments_2 ORDER BY ABS(inc) ASC)
VALUES (IFNULL((SELECT
1.0 - (delta / thicc)
FROM deltas, theta
WHERE delta <= thicc
LIMIT 1), 0))) AS value
FROM vertical, horizontal, video, frames))
INSERT INTO pixels (image_id, x, y, r, g, b) SELECT frame_id, x, y, r, g, b FROM _pixels;
|