`
yiyu
  • 浏览: 186686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

html5 canvas 小试:绘制2次曲线

阅读更多

canvas是html5中新增加的元素,可以用来在html中通过javascript绘制图形,处理图像。
虽然现在html5还没有正式发布,但firefox 3+,chrome 2.0+,safari 4等都已经支持,
ie也可以通过扩展支持该功能

关于canvas的简单介绍可以参看这里,其中有很多很好的链接:
http://en.wikipedia.org/wiki/Canvas_element

html5草稿版中对canvas的定义可以参看这里:
http://www.w3.org/TR/2009/WD-html5-20090825/the-canvas-element.html

Mozilla的相关页面见这里:
https://developer.mozilla.org/en/Canvas_tutorial

其中对ie的扩展有2种,我试用了一下google的:
http://code.google.com/p/explorercanvas/

作为试手,我做了一个画2次曲线的页面,运行效果如下图:



其中可以调整a,b,c三个系数,可以指定横竖坐标轴的最大值,步数指的是横坐标的采样数,
为了保证左右一样,输入值为半边的采样数。
代码如下,我在firefox3.5.8,chrome 5.0, ie8里都跑过,其中ie8要用到google的explorercanvas,
输入值有效性检查之类的一并忽略,呵呵。
<html>

<head>
	<title>learn canvas 001</title>
	<!--[if IE]><script type="text/javascript" src="excanvas.js"></script><![endif]-->
	<script type="text/javascript">
		var MAX_WIDTH = 640;
		var MAX_HEIGHT = 480;
		
		function init() {
			var g = getCanvasContext();
			g.translate(MAX_WIDTH/2, MAX_HEIGHT/2);
			
			initGraph();
		}
		
		function initGraph() {
			var g = getCanvasContext();
			g.strokeStyle = 'black';
			if (g) {
				g.clearRect(-MAX_WIDTH/2, -240, MAX_WIDTH, MAX_HEIGHT);
				g.strokeRect(-MAX_WIDTH/2, -240, MAX_WIDTH, MAX_HEIGHT);

				g.beginPath();
				g.moveTo(-MAX_WIDTH/2, 0);
				g.lineTo(MAX_WIDTH/2, 0);
				g.moveTo(0, -MAX_HEIGHT/2);
				g.lineTo(0, MAX_HEIGHT/2);
				g.stroke();
			}
		}
		
		function draw() {
			initGraph();
			
			var maxX = Number(document.getElementById('maxX').value);
			var maxY = Number(document.getElementById('maxY').value);
			var halfStep = Number(document.getElementById('halfStep').value);
			
			var g = getCanvasContext();
			if (g) {
				var x, y;
				var sx, sy;
				var currStep;
				
				sx = -MAX_WIDTH/2
				sy = -MAX_HEIGHT/2 * calculateY(-maxX) / maxY;
				g.beginPath();
				g.moveTo(sx, sy);
				
				for (currStep=-halfStep + 1; currStep<=halfStep; currStep++) {
					x = maxX * currStep / halfStep;
					y = calculateY(x);
					sx = MAX_WIDTH/2 * x / maxX;
					sy = -MAX_HEIGHT/2 * y / maxY;
					g.lineTo(sx, sy);
				}
				g.strokeStyle = 'blue';
				g.stroke();
			}
		}
		
		function calculateY(x) {
			var a = Number(document.getElementById('a').value);
			var b = Number(document.getElementById('b').value);
			var c = Number(document.getElementById('c').value);
			
			var y = a * x * x + b * x + c;
			return y;
		}
		
		function getCanvasContext() {
			var c = document.getElementById('myCanvas');
			if(c && c.getContext) {
				var g = c.getContext('2d');
				return g;
			} else {
				return null;
			}
		}
	</script>
</head>

<body onload="init()">
	<canvas id="myCanvas" width="640" height="480">
		该浏览器不支持Canvas.
	</canvas>
	<p>
	<table>
		<tr>
			<td colspan="2">
				函数 = <input type="text" id="a" size="2" value="1"/> * x * x + <input type="text" size="2" id="b" value="2"/> * x + <input type="text" size="2" id="c" value="3"/>
			</td>
		</tr>
		<tr>
			<td>最大横坐标:</td>
			<td><input type="text" id="maxX" value="10"/></td>
		</tr>
		<tr>
			<td>最大纵坐标:</td>
			<td><input type="text" id="maxY" value="200"/></td>
		</tr>
		<tr>
			<td>二分之一总步数:</td>
			<td><input type="text" id="halfStep" value="20"/></td>
		</tr>
		<tr>
			<td colspan="2"><button name="btnDraw" type="button" onClick="draw()">Draw</button></td>
		</tr>
	</table>
	
</body>

</html>
  • 大小: 26.4 KB
分享到:
评论

相关推荐

    html5 canvas绘制曲线动画特效.zip

    在这个“html5 canvas绘制曲线动画特效.zip”压缩包中,包含了一个名为“demo.html”的文件,我们可以推测这是一个展示如何使用Canvas API创建曲线动画特效的示例。 Canvas API是一个基于矢量图形的JavaScript接口...

    2.22 用canvas绘制一角弯月|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.22_用canvas绘制一角弯月|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全

    Html5_Canvas绘制心电图曲线.rar

    Html5_Canvas绘制心电图,绘制出了超逼真的心电图曲线,要是有什么第三方硬件输入数据,是不是这真的就是心电图了?PS:查看效果时建议使用Google Chrome浏览器,因Google Chrome浏览器对Html5支持最好。

    HTML5 canvas绘制流程图

    HTML5的canvas元素是网页开发中的一个强大工具,它提供了在网页上动态绘制图形的能力,类似于画布。在这个场景中,我们关注的是如何利用canvas来创建一个流程图,一种用于表示程序逻辑或工作流程的图表。流程图通常...

    html5结构图canvas绘制组织结构图框架代码

    HTML5是现代网页开发的重要标准,它引入了许多新特性,其中Canvas元素是用于在网页上进行动态图形绘制的。Canvas通过JavaScript API提供了丰富的图形绘制功能,使得开发者无需依赖Flash或其他插件就能创建复杂的2D...

    SVG和Canvas绘图:Canvas路径绘制技巧.docx

    SVG和Canvas绘图:Canvas路径绘制技巧.docx

    html5 canvas 贝赛尔曲线

    在HTML5 Canvas中,我们通常使用的是二次和三次贝塞尔曲线,它们分别通过`moveTo()`、`lineTo()`、`quadraticCurveTo()`和`bezierCurveTo()`方法来绘制。 1. **二次贝塞尔曲线(quadratic Bézier curve)**: - `...

    HTML5 Canvas绘制时钟

    HTML5 Canvas是一个强大的Web绘图工具,允许开发者在网页上直接进行图形绘制,无需借助Flash或其他插件。这篇博文“HTML5 Canvas绘制时钟”旨在介绍如何利用Canvas API创建一个实时更新的数字或指针式时钟。我们将...

    html5 canvas画布绘制圆形时钟代码

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制。这个技术为网页带来了丰富的交互性和视觉效果。在这个“html5 canvas画布绘制圆形时钟代码”示例中,我们将深入探讨如何利用Canvas ...

    HTML5 Canvas核心技术—图形、动画与游戏开发一书源代码

    HTML5 Canvas是Web开发中的一个关键技术,它提供了一个在网页上绘制图形的API,使得开发者可以直接在浏览器中创建丰富的交互式2D图形、动画以及游戏。"HTML5 Canvas核心技术—图形、动画与游戏开发"这本书深入浅出地...

    SVG和Canvas绘图:使用Canvas绘制基本图形.docx

    SVG和Canvas绘图:使用Canvas绘制基本图形.docx

    html5 canvas绘制管道里跳动小球动画特效

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式2D图形和动画。"html5 canvas绘制管道里跳动小球动画特效"是一个利用Canvas API实现的典型应用场景,旨在创建一...

    用Canvas绘制的曲线

    在IT行业中,Canvas是HTML5的一个重要特性,用于在网页上进行动态图形绘制。这个"用Canvas绘制的曲线"项目,旨在实现一个实时更新的曲线图表,其中的点由随机数生成,并且每过一秒就会刷新一个新的点。这样的功能...

    html5 canvas绘制3D地球旋转动画特效

    // 请求下一次绘制 requestAnimationFrame(draw); } draw(); ``` 此外,为了增加互动性,我们还可以添加鼠标悬停时高亮特定地区的功能。这可能涉及到检测鼠标位置与地球上的坐标,然后改变相应区域的颜色。 在...

    HTML5 Canvas核心技术图形动画与游戏开发 ((美)David Geary) 中文【PDF】

    第2章深入研究了如何使用Canvas的API进行绘制;第3章告诉读者如何绘制并操作Canvas中的文本;第4章专门讲解图像、图像的操作及视频处理;第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵...

    html5 canvas绘制逼真的闪电动画特效

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。本教程将深入探讨如何利用HTML5 Canvas绘制逼真的闪电动画特效,为网页添加炫酷的视觉效果。 首先,...

    html5 canvas绘制七巧板图形代码

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制。七巧板是一种古老的益智玩具,由七个不同形状的板组成,可以拼出各种图案。在HTML5 Canvas上绘制七巧板图形,可以结合数学、编程和...

    2.23 quadraticCurveTo,二次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.23_quadraticCurveTo,二次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、

    使用HTML5 Canvas绘制 3D房间模型和人物动画特效

    HTML5 Canvas是一个强大的Web图形接口,它允许开发者在网页上直接用JavaScript绘制2D和3D图形。在"使用HTML5 Canvas绘制3D房间模型和人物动画特效"这个主题中,我们将深入探讨如何利用Canvas技术构建逼真的3D环境,...

    html5 Canvas绘制2D背景2

    在“html5 Canvas绘制2D背景2”这个主题中,我们将深入探讨如何利用Canvas API来绘制复杂的2D背景。Canvas API提供了多种方法来绘制和操作图形,包括直线、曲线、圆形、矩形、文本以及图像等。以下是一些关键知识点...

Global site tag (gtag.js) - Google Analytics