JavaScript图像放大镜效果实现方法详解


Posted in Javascript onJune 28, 2020

1. 基本四瓣花型图案

根据四瓣花卉线的参数方程:

t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2);

x=t*cos(θ));

y=t*sin(θ));

编写如下的HTML文件。

<!DOCTYPE html>

<head>

	<title>基本的四瓣花型图案</title>

	<script type="text/javascript">
		function draw(id)
		{
			var canvas = document.getElementById(
				id);
			if (canvas == null)
				return false;
			var context = canvas.getContext('2d');
			context.fillStyle = "#EEEEFF";
			context.fillRect(0, 0, 320, 320);
			context.strokeStyle = "blue";
			context.lineWidth = 1;
			var dig = Math.PI / 64;
			context.beginPath();
			for (var i = 0; i <= 128; i++)
			{
				d = 120 * (1 + Math.sin(12 * i *
					dig) / 5);
				t = d * (0.5 + Math.sin(4 * i * dig) /
					2);
				x = (160 + t * Math.cos(i * dig));
				y = (160 + t * Math.sin(i * dig));
				if (i == 0)
					context.moveTo(x, y);
				else
					context.lineTo(x, y);
			}
			context.stroke();
		}
	</script>

</head>

<body onload="draw('myCanvas');">

	<canvas id="myCanvas" width="320" height="320"></canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出如图1所示的四瓣花卉线图案。

JavaScript图像放大镜效果实现方法详解

图1 四瓣花卉线图案

2.平铺的100朵四瓣花

用一个二重循环将图1的四瓣花卉绘制10行10列共100朵。编写的HTML文件内容如下。

<!DOCTYPE html>

<head>

	<title>平铺的100朵四瓣花</title>

	<script type="text/javascript">
		function draw(id)
		{
			var canvas = document.getElementById(
				id);
			if (canvas == null)
				return false;
			var context = canvas.getContext('2d');
			context.fillStyle = "#EEEEFF";
			context.fillRect(0, 0, 320, 320);
			context.strokeStyle = "blue";
			context.lineWidth = 1;
			var dig = Math.PI / 64;
			context.beginPath();
			for (px = 20; px < 320; px += 30)
				for (py = 20; py < 320; py += 30)
			{
				for (var i = 0; i <= 128; i++)
				{
					d = 20 * (1 + Math.sin(12 * i *
						dig) / 5);
					t = d * (0.5 + Math.sin(4 * i *
						dig) / 2);
					x = px + t * Math.cos(i * dig);
					y = py + t * Math.sin(i * dig);
					if (i == 0)
						context.moveTo(x, y);
					else
						context.lineTo(x, y);
				}
				context.stroke();
			}
		}
	</script>
</head>
<body onload="draw('myCanvas');">
	<canvas id="myCanvas" width="320" height="320"></canvas>
</body>
</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出如图2所示的平铺的100朵四瓣花卉图案。

JavaScript图像放大镜效果实现方法详解

图2 平铺的100朵四瓣花卉图案

3.放大镜看平铺的四瓣花

将图2图形中位于中心点周围100以内的点的坐标进行球面镜反射变换,可以实现放大镜效果。编写的HTML文件内容如下。

<!DOCTYPE html>

<head>

	<title>球面镜反射变换</title>

	<script type="text/javascript">
		function draw(id)
		{
			var canvas = document.getElementById(
				id);
			if (canvas == null)
				return false;
			var context = canvas.getContext('2d');
			context.fillStyle = "#EEEEFF";
			context.fillRect(0, 0, 320, 320);
			context.strokeStyle = "blue";
			context.lineWidth = 1;
			var dig = Math.PI / 64;
			context.beginPath();
			var r = 140;
			var x0 = 160;
			var y0 = 160;
			for (px = 20; px < 320; px += 30)
				for (py = 20; py < 320; py += 30)
			{
				for (var i = 0; i <= 128; i++)
				{
					d = 20 * (1 + Math.sin(12 * i *
						dig) / 5);
					t = d * (0.5 + Math.sin(4 * i *
						dig) / 2);
					x = px + t * Math.cos(i * dig);
					y = py + t * Math.sin(i * dig);
					l = Math.sqrt((x - x0) * (x - x0) +
						(y - y0) * (y - y0));
					if (l < r)
					{ // 圆心为(160,160),半径为140的圆内各点进行球面镜反射变换
						s = x - x0 < 0 ? -1 : 1;
						if (x - x0 == 0) x = x0 + 0.1;
						bt = 2 * Math.atan(l / r);
						th = Math.atan((y - y0) / (x - x0));
						m = r * Math.sin(bt);
						x = s * m * Math.cos(th) + x0;
						y = s * m * Math.sin(th) + y0;
					}
					if (i == 0)
						context.moveTo(x, y);
					else
						context.lineTo(x, y);
				}
				context.stroke();
			}
		}
	</script>

</head>

<body onload="draw('myCanvas');">

	<canvas id="myCanvas" width="320" height="320"></canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出如图3所示的图形放大镜效果1。

JavaScript图像放大镜效果实现方法详解

图3 图形放大镜效果1

上面程序中语句var r=140;、var x0=160;和var y0=160;用于设置放大镜的圆心坐标和半径。若修改r=100,x0=100,y0=100,则在画布中绘制出如图4所示的图形放大镜效果2。

JavaScript图像放大镜效果实现方法详解

图4 图形放大镜效果2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery代码优化 选择符篇
Nov 01 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
Jan 12 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
简单实现js轮播图效果
Jul 14 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
element ui 对话框el-dialog关闭事件详解
Feb 26 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
vue 全局环境切换问题
Oct 27 Javascript
详细分析Node.js 模块系统
Jun 28 #Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 #Javascript
js瀑布流布局的实现
Jun 28 #Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 #Javascript
vue实现登录拦截
Jun 29 #Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
Jun 28 #Javascript
JavaScript多种图形实现代码实例
Jun 28 #Javascript
You might like
php debug 安装技巧
2011/04/30 PHP
php笔记之:AOP的应用
2013/04/24 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
phpwind放自动注册方法
2006/12/02 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
详解Python验证码识别
2016/01/25 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
日本无添加化妆品:HABA
2016/08/18 全球购物
师范应届生语文教师求职信
2013/10/29 职场文书
建筑个人求职信范文
2014/01/25 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
学校安全责任书
2014/04/14 职场文书
支部组织生活会方案
2014/06/10 职场文书
学习保证书
2015/01/17 职场文书
活动简报范文
2015/07/22 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书