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 相关文章推荐
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
Jquery颜色选择器ColorPicker实现代码
Nov 14 Javascript
js由下向上不断上升冒气泡效果实例
May 07 Javascript
javascript实现Table排序的方法
May 15 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
微信小程序仿RadioGroup改变样式的处理方案
Jul 13 Javascript
JS实现音量控制拖动
Jan 15 Javascript
vue穿梭框实现上下移动
Jan 29 Vue.js
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 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使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
javascript Excel操作知识点
2009/04/24 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
vue实现购物车列表
2020/06/30 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
pandas数据处理之绘图的实现
2020/06/15 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
英语翻译系毕业生求职信
2013/09/29 职场文书
电子商务专业学生的学习自我评价
2013/10/27 职场文书
本科毕业生自我鉴定
2013/11/02 职场文书
高中物理教学反思
2014/02/08 职场文书
教师远程培训感言
2014/03/06 职场文书
爱心捐款感谢信
2015/01/20 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
小学数学教学随笔
2015/08/14 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js