aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/spiral.video.sql56
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;