用SQL Server绘制爱情的心形

1. 前言

情人节临近,大家是否想要为自己的爱人做点特别的事情呢?!那为什么不用SQL Server来制作一张属于你们的爱情地图呢?本文将教大家如何使用SQL Server来绘制爱情心形。

2. SQL Server中的绘图库库

SQL Server为我们提供了一种名为sp_hexadecimal的系统存储过程,它将十进制数字转换为十六进制数字。我们可以利用这个存储过程将坐标变换成十六进制,从而在SQL Server上绘制出图形。

2.1. sp_hexadecimal存储过程的定义和使用

下面是sp_hexadecimal存储过程的定义:

CREATE PROCEDURE sp_hexadecimal  

@binvalue varbinary(256),

@hexvalue varchar(512) OUTPUT

AS

DECLARE @charvalue varchar(256)

DECLARE @i int

DECLARE @length int

DECLARE @hexstring char(16)

SELECT @charvalue = '0x'

SELECT @i = 1

SELECT @length = DATALENGTH (@binvalue)

SELECT @hexstring = '0123456789ABCDEF'

WHILE (@i <= @length)

BEGIN

DECLARE @tempint int

DECLARE @firstint int

DECLARE @secondint int

SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))

SELECT @firstint = FLOOR(@tempint/16)

SELECT @secondint = @tempint - (@firstint*16)

SELECT @charvalue = @charvalue +

SUBSTRING(@hexstring, @firstint+1, 1) +

SUBSTRING(@hexstring, @secondint+1, 1)

SELECT @i = @i + 1

END

SELECT @hexvalue = @charvalue

我们可以使用它来将坐标点转化为十六进制坐标点。

2.2. 爱心型函数的实现

绘制出爱心,在数学上是可以通过一种二次方程实现的。下面是一个可在SQL Server中实现的函数,用来生成一个离散的爱心轮廓。

CREATE FUNCTION dbo.fnLoveHeart(x float, y float) 

RETURNS int

AS

BEGIN

DECLARE @i float

DECLARE @j float

SET @i = (x * x) + (y * y) - 1

SET @j = (@i * @i * @i) - (x * x * y * y * y)

RETURN CASE WHEN @j > 0 THEN 1 ELSE 0 END

END

3. 绘制爱情心形

我们可以使用下面代码来调用上述函数,在SQL Server中生成一个图形。

DECLARE @heart nvarchar(3000)  

SET @heart = ''

SELECT @heart = @heart +

'

ELSE 'white" '

END

+ '> '

FROM (SELECT DISTINCT x, y FROM #heart) AS t

ORDER BY y, x

DECLARE @html nvarchar(4000)

SET @html = '

'

+ '

' + @heart + ''

+ '

'

PRINT @html

3.1. 生成图形

下面介绍一下如何使用上面的代码在SQL Server中绘制出一个爱心。

第一步:在SQL中创建一个临时表,用来存储所有需要展示的数据。

CREATE TABLE #heart(x int, y int)

第二步:将需要展示的数据添加到这个表中。例如,我们需要绘制一个爱心,我们需要用for循环来填充这个表中所有可能出现的坐标点。

DECLARE @i int = -27  

DECLARE @j int = -15

WHILE (@i <= 27)

BEGIN

WHILE (@j <= 15)

BEGIN

INSERT INTO #heart(x, y)

VALUES (@i, @j)

SET @j = @j + 1

END

SET @j = -15

SET @i = @i + 1

END

第三步:使用上文中提到的函数dbo.fnLoveHeart,在SQL Server中生成一个爱心的轮廓数据。

第四步:使用下面的代码生成一个字符串,用来存储生成的HTML表格代码。

DECLARE @heart nvarchar(3000)

SET @heart = ''

SELECT @heart = @heart +

'

ELSE 'white" '

END

+ '> '

FROM (SELECT DISTINCT x, y FROM #heart) AS t

ORDER BY y, x

DECLARE @html nvarchar(4000)

SET @html = '

'

+ '

' + @heart + ''

+ '

'

PRINT @html

第五步:设置数据库选项SET ANSI_NULLS ONSET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

DECLARE @i int = -27

DECLARE @j int = -15

-- 创建一个表存储心形轮廓数据

CREATE TABLE #heart(x int, y int)

-- 生成需要绘制的坐标点

WHILE (@i <= 27)

BEGIN

WHILE (@j <= 15)

BEGIN

INSERT INTO #heart(x, y)

VALUES (@i, @j)

SET @j = @j + 1

END

SET @j = -15

SET @i = @i + 1

END

-- 绘制心形

DECLARE @heart nvarchar(3000)

SET @heart = ''

SELECT @heart = @heart +

'

ELSE 'white" '

END

+ '> '

FROM (SELECT DISTINCT x, y FROM #heart) AS t

ORDER BY y, x

-- 输出html代码

DECLARE @html nvarchar(4000)

SET @html = '

'

+ '

' + @heart + ''

+ '

'

PRINT @html

4. 结论

本文介绍了如何使用SQL Server自带的sp_hexadecimal存储过程,在SQL Server上绘制出一个简单的爱心图形。大家可以在情人节或纪念日将制作好的图形赠送给你的爱人,以表达自己对彼此的爱。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签