Data Update
This commit is contained in:
parent
e50b5c3114
commit
633b36288a
206 changed files with 4762 additions and 965 deletions
113
Task/Julia-set/Transact-SQL/julia-set.sql
Normal file
113
Task/Julia-set/Transact-SQL/julia-set.sql
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
-- Juila Set
|
||||
-- SQL Server 2017 and above
|
||||
SET NOCOUNT ON
|
||||
GO
|
||||
|
||||
-- Plot area 800 X 600
|
||||
DECLARE @width INT = 800
|
||||
DECLARE @height INT = 600
|
||||
|
||||
DECLARE @r_min DECIMAL (10, 8) = -1.5;
|
||||
DECLARE @r_max DECIMAL (10, 8) = 1.5;
|
||||
DECLARE @i_min DECIMAL (10, 8) = -1;
|
||||
DECLARE @i_max DECIMAL (10, 8) = 1;
|
||||
|
||||
DECLARE @zoom INT = 1,
|
||||
@moveX INT = 0,
|
||||
@moveY INT = 0;
|
||||
|
||||
DECLARE @iter INT = 255; -- Iteration
|
||||
|
||||
DROP TABLE IF EXISTS dbo.Numbers
|
||||
DROP TABLE IF EXISTS dbo.julia_set;
|
||||
|
||||
CREATE TABLE dbo.Numbers (n INT);
|
||||
|
||||
-- Generate a number table of 1000 rows
|
||||
;WITH N1(n) AS
|
||||
(
|
||||
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
|
||||
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
|
||||
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
|
||||
), -- 10
|
||||
N2(n) AS (SELECT 1 FROM N1 CROSS JOIN N1 AS b), -- 10*10
|
||||
N3(n) AS (SELECT 1 FROM N1 CROSS JOIN N2) -- 10*100
|
||||
INSERT INTO dbo.Numbers (n)
|
||||
SELECT n = ROW_NUMBER() OVER (ORDER BY n)
|
||||
FROM N3 ORDER BY n;
|
||||
/*
|
||||
-- If the version is SQL Server 2022 and above
|
||||
INSERT INTO dbo.Numbers (n)
|
||||
SELECT value FROM GENERATE_SERIES(0, 1000);
|
||||
*/
|
||||
|
||||
CREATE TABLE dbo.julia_set
|
||||
(
|
||||
a INT,
|
||||
b INT,
|
||||
c_re DECIMAL (10, 8),
|
||||
c_im DECIMAL (10, 8),
|
||||
z_re DECIMAL (10, 8) DEFAULT 0,
|
||||
z_im DECIMAL (10, 8) DEFAULT 0,
|
||||
znew_re DECIMAL (10, 8) DEFAULT 0,
|
||||
znew_im DECIMAL (10, 8) DEFAULT 0,
|
||||
steps INT DEFAULT 0,
|
||||
active BIT DEFAULT 1,
|
||||
)
|
||||
|
||||
-- Store all the z_re, z_im with constant c_re, c_im corresponding to each point in the plot area
|
||||
-- Generate 480,000 rows (800 X 600)
|
||||
INSERT INTO dbo.julia_set (a, b, c_re, c_im, z_re, z_im, steps)
|
||||
SELECT a.n as a, b.n as b
|
||||
,-0.7 AS c_re
|
||||
,0.27015 AS c_im
|
||||
,@r_max * (a.n - @width / 2) / (0.5 * @zoom * @width) + @moveX AS z_re
|
||||
,@i_max * (b.n - @height / 2) / (0.5 * @zoom * @height) + @moveY AS z_im
|
||||
,@iter as steps
|
||||
FROM
|
||||
(
|
||||
SELECT n - 1 as n FROM dbo.Numbers WHERE n <= @width
|
||||
) as a
|
||||
CROSS JOIN
|
||||
(
|
||||
SELECT n - 1 as n FROM dbo.Numbers WHERE n <= @height
|
||||
) as b;
|
||||
|
||||
-- Iteration
|
||||
WHILE (@iter > 1)
|
||||
BEGIN
|
||||
|
||||
UPDATE dbo.julia_set
|
||||
SET
|
||||
znew_re = POWER(z_re,2)-POWER(z_im,2)+c_re,
|
||||
znew_im = 2*z_re*z_im+c_im,
|
||||
steps = steps-1
|
||||
WHERE active=1;
|
||||
|
||||
UPDATE dbo.julia_set
|
||||
SET
|
||||
z_re=znew_re,
|
||||
z_im=znew_im,
|
||||
active= CASE
|
||||
WHEN POWER(znew_re,2)+POWER(znew_im,2)>4 THEN 0
|
||||
ELSE 1
|
||||
END
|
||||
WHERE active=1;
|
||||
|
||||
SET @iter = @iter - 1;
|
||||
END
|
||||
|
||||
-- Generating PPM File
|
||||
-- Save the below query results to a file with extension .ppm
|
||||
-- NOTE : All the unwanted info like 'rows affected', 'completed time' etc. needs to be
|
||||
-- removed from the file. Most of the image editing softwares and online viewers can display the .ppm file
|
||||
SELECT 'P3' UNION ALL
|
||||
SELECT CAST(@width AS VARCHAR(5)) + ' ' + CAST(@height AS VARCHAR(5)) UNION ALL
|
||||
SELECT '255' UNION ALL
|
||||
SELECT
|
||||
STRING_AGG(CAST(CASE WHEN active = 1 THEN 0 ELSE 55 + steps % 200 END AS VARCHAR(MAX)) + ' ' -- R
|
||||
+ CAST(CASE WHEN active = 1 THEN 0 ELSE 55+POWER(steps,3) % 200 END AS VARCHAR(MAX)) + ' ' -- G
|
||||
+ CAST(CASE WHEN active = 1 THEN 0 ELSE 55+ POWER(steps,2) % 200 END AS VARCHAR(MAX)) -- B
|
||||
, ' ') WITHIN GROUP (ORDER BY a, b)
|
||||
FROM dbo.julia_set
|
||||
GROUP BY a, b
|
||||
Loading…
Add table
Add a link
Reference in a new issue