diff options
Diffstat (limited to '')
| -rw-r--r-- | src/spiral.video.sql | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/spiral.video.sql b/src/spiral.video.sql new file mode 100644 index 0000000..da8ce1c --- /dev/null +++ b/src/spiral.video.sql @@ -0,0 +1,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; |
