`
lucifinilhades
  • 浏览: 87316 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

HTML5 绘制图形【4】

阅读更多

绘制变形图形

坐标变换

绘制图形的时候,我们可能会想要旋转图形,或对图形使用变形处理,使用Canvas API的坐标轴变换处理功能,可以实现这种效果。

在计算机上绘制图形的时候,是以坐标单位为基准来进行图形绘制的。默认情况下,Canvas画布的最左上角对应于坐标轴原点(0, 0)。如果对这个坐标使用变换处理,就可以实现图形的变形处理了。对坐标的变换处理有三种方式:

平移

使用图形上下文对象的translate()方法移动坐标轴原点。该方法的定义如下:

context.translate(x, y);

该方法使用两个参数,x表示将坐标轴原点向左移动多少个单位,默认情况下为像素;y表示将坐标轴原点向下移动多少个单位。

缩放

使用图形上下文对象的scale()方法将图形进行缩放。该方法的定义如下:

context.scale(x, y);

该方法使用两个参数,x是水平方向的缩放倍数,y是垂直方向的缩放倍数。要缩小图形的时候,将这两个参数设置为0到1之间的小数就可以了,例如0.5是指将图形缩小一半。

旋转

使用图形上下文对象的rotate()方法将图形进行旋转。该方法的定义如下:

context.rotate(angle);

该方法接受一个参数,该参数是指放置的角度,放置的中心是坐标轴的原点。放置是以顺时针方向进行的,要想逆时针旋转时,将该参数设置为负数就可以了。

坐标变换示例如下所示:

Canvas.prototype.translate = function(x, y) {
	this.context.translate(x, y);
	return this;
};

Canvas.prototype.scale = function(x, y) {
	this.context.scale(x, y);
	return this;
};

Canvas.prototype.rotate = function(x, y) {
	this.context.rotate(x, y);
	return this;
};

$(function() {
	var canvas = new Canvas("draw");
	canvas.fillStyle("#EEEEFF").fillRect(0, 0, 400, 400).translate(200, 50).fillStyle('rgba(255, 0, 0, 0.25)');
	for(var i = 0; i < 50; i++) {
		canvas.translate(25, 25).scale(0.95, 0.95).rotate(Math.PI / 10).fillRect(0, 0, 100, 50);
	}
});

坐标变换与路径的结合使用

如果要对矩形进行变形,使用坐标变换就足够了。但是对使用路径绘制出来的图形进行变换的时候,要考虑的事情就比较多了。因为使用了坐标变换之后,已经创建好的路径就不能用了。必须要重新创建路径。重新创建路径之后,坐标变换方法又失效了。这时必须先另外写一个创建路径的函数,然后在坐标变换的同时调用该函数,这样才能解决这个问题。使用示例如下所示:

$(function() {
	var create5Star = function(context) {
		var dx = 100, dy = 0, x, y, s = 50, dig = Math.PI / 5 * 4;
		context.beginPath().fillStyle('rgba(255, 0, 0, 0.5)');
		for(var i = 0; i < 5; i++) {
			x = Math.sin(i * dig) * s + dx;
			y = Math.cos(i * dig) * s + dy;
			context.lineTo(x, y);
		}
		context.closePath();
	};
	
	var canvas = new Canvas("draw");
	canvas.fillStyle("#EEEEFF").fillRect(0, 0, 400, 400).translate(200, 50);
	for(var i = 0; i < 50; i++) {
		create5Star(canvas.translate(25, 25).scale(0.95, 0.95).rotate(Math.PI / 10));
		canvas.fill();
	}
});

矩阵变换

矩阵是专门用来实现图形变形的,它与坐标一起配合使用,以达到变形的目的。当图形上下文被创建完毕时,事实上也创建了一个默认的变换矩阵,如果不对这个变换矩阵进行修改,那么接下来绘制的图形将以画布的最左上角为坐标原点绘制图形,绘制出来的图形也不经过缩放、变形的处理。使用图形上下文对象的transforms()方法修改变换矩阵,该方法的定义如下:

context.transform(m11, m12, m21, m22, dx, dy);

该方法使用一个新的变换矩阵与当前变换矩阵进行乘法运算。其中m11, m21, m12, m22四个参数用来修改使用这个方法之后,绘制图形时的计算方法,以达到变形目的,dx与dy参数移动坐标原点,默认以像素为单位。上面所使用坐标变换进行图形变形的技术中所提到的三个方法,实际上是隐式地修改了变换矩阵,都可以使用transform()方法来进行代替。

translate(x, y)

可以使用context.transform(1, 0, 0, 1, x, y)或context.transform(0, 1, 1, 0, x, y)方法进行代替,前面四个参数表示不对图形进行缩放操作,变形操作,将dx, dy设置为x, y表示将坐标原点移至此处。

scale(x, y)

可以使用context.transform(x, 0, 0, y, 0, 0)或context.transform(0, y, x, 0, 0, 0)方法代替,前面四个参数表示将图形横向扩大x倍,纵向扩大y倍。dx, dy为0表示不移动坐标原点。

rotate(angle)

替代方法如下所示:

context.transform(Math.cos(angle * Math.PI / 180), Math.sin(angle * Math.PI / 180), -Math.sin(angle * Math.PI / 180), Math.cos(angle * Math.PI / 180), 0, 0);
// 或者
context.transform(-Math.sin(angle * Math.PI / 180), Math.cos(angle * Math.PI / 180), Math.cos(angle * Math.PI / 180), Math.sin(angle * Math.PI / 180), 0, 0);

其中前四个参数以三角函数的形式结合起来,共同完成图形按angle角度的顺时针旋转处理,dx, dy为0表示不移动坐标原点。

使用了transform()方法后,接下来要绘制的图形都会按照移动后的坐标原点与新的变换矩阵相结合的方法进行绘制,必要时可以使用setTransform()方法将变换矩阵进行重置,该方法的定义如下所示:

context.setTransform(m11, m12, m21, m22, dx, dy);

该方法的参数及参数 用法与transform()相同,事实上,该方法的作用为将画布上的最左上角重置为坐标原点,当图形上下文创建完毕时将所创建的初始变换矩阵设置为当前变换矩阵,然后使用transform()方法。

分享到:
评论

相关推荐

    html5 canvas绘制七巧板图形代码

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

    html5 canvas绘制几何图形动画特效

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的视觉效果。这个技术尤其适合创建几何图形动画特效,给用户带来互动且引人入胜的体验。以下是对HTML5 Canvas绘制几何...

    html5 canvas涂鸦画板绘制图形效果

    "html5 canvas涂鸦画板绘制图形效果"这一主题涵盖了Canvas的基本用法、图形绘制方法以及如何实现一个涂鸦画板功能。 1. **Canvas基本概念**: HTML5 Canvas是一个基于矢量图形的画布元素,通过JavaScript API提供...

    HTML5 canvas自由绘制图形工具.zip

    这个"HTML5 canvas自由绘制图形工具.zip"文件显然包含了一个实现用户可以在画板上自由绘制图形的应用。这个应用利用JavaScript(JS)的API来控制canvas元素,允许用户进行拖拽、绘制和编辑图形。 在HTML5中,`...

    应用html5以及js在网页上绘制图形

    应用html5画布功能以及脚本语言js在网页上绘制图表并标注

    vue+canvas绘制图形

    首先,我们来看"vue+canvas绘制图形"这个主题。Vue组件是Vue.js的核心特性之一,它允许我们将UI拆分成独立、可复用的部分。在这个项目中,我们可以创建一个名为`Canvas.vue`的Vue组件,专门负责处理Canvas元素。在`...

    HTML5绘制体温单图例

    在这个"HTML5绘制体温单图例"的项目中,前端开发者利用JavaScript(js)来根据数据配置动态生成体温图表,这涉及到一系列的技术和算法。 首先,Canvas API是HTML5中的一个核心组成部分,它提供了一组JavaScript方法...

    如何在Web页中绘制图形

    HTML5引入了Canvas API,这是一个基于标签的二维绘图上下文,允许开发者直接在浏览器中绘制图形。Canvas提供了丰富的绘图方法,如`fillRect()`, `strokeRect()`, `arc()`, `lineTo()`, `beginPath()`等,可以用来...

    根据用户数据表格html5绘制饼状图形代码

    总的来说,根据用户数据表格使用HTML5绘制饼状图的过程涉及HTML5的`&lt;canvas&gt;`元素、JavaScript的数据处理、图形绘制算法以及选择合适的库(如D3.js或Chart.js)。通过熟练掌握这些技术,开发者可以创建出互动性强、...

    基于HTML5流程图绘制代码

    - **Canvas**:HTML5的Canvas是一块可以动态绘制图形的画布,通过JavaScript API,开发者可以直接在画布上绘制线条、形状、图像等。Canvas适合动态、数据驱动的图形绘制,例如图表、游戏场景等。 - **SVG...

    Html利用Canvas绘制图形

    HTML5的Canvas元素是网页动态图形绘制的重要工具,它允许开发者通过JavaScript代码在网页上创建出丰富的、交互式的2D图形。在这个主题中,“Html利用Canvas绘制图形”涵盖了多种形状的绘制方法,包括基础形状和复杂...

    html5 canvas实现的绘图工具自由绘制图形画板源码

    html5 canvas实现的绘图工具自由绘制图形画板源码 有很多功能

    html实现绘制图形(canvas &amp;&amp; html)

    然而,HTML本身并不支持直接绘制图形,这时就需要借助Canvas元素。Canvas是一个基于矢量图形的画布,我们可以使用JavaScript来控制它的每一像素,从而实现复杂的图形绘制和动画效果。 Canvas通过JavaScript API提供...

    HTML5 Canvas绘制时钟

    Canvas提供了各种方法和属性,如`fillRect()`(填充矩形)、`beginPath()`(开始路径)和`stroke()`(描边)等,用于绘制图形。 2. Canvas API - `getContext()`: 这个方法用于获取Canvas的绘图环境,通常返回一个...

    html5 canvas自定义绘制多边图形代码

    Canvas 提供了一个二维绘图环境,可以用来绘制图形、动画,甚至处理图像。在Canvas上绘制多边形是常见的需求,尤其在创建自定义图形、游戏或者数据可视化时。本篇文章将深入探讨如何使用HTML5 Canvas自定义绘制多边...

    HTML5绘制变形图形2案例.pdf

    在提供的"HTML5绘制变形图形2案例.pdf"学习资料中,主要涉及了三个关键知识点:坐标变换、平移效果和缩放效果。 1. **坐标变换**: 在案例1中,展示了如何利用`context.translate()`方法改变画布的坐标系。默认...

    HTML5应用开发技术-canvas绘制图形、图像与文字.pptx

    在这个“HTML5应用开发技术-canvas绘制图形、图像与文字”的主题中,我们将深入探讨Canvas API的使用。 首先,Canvas API提供了一系列的方法来绘制图形。在案例中,可以看到如何在画布中心绘制文字。首先,通过`...

    html5 canvas实现的绘图工具自由绘制图形画板源码.zip

    这个“html5 canvas实现的绘图工具自由绘制图形画板源码.zip”文件很可能是提供了一个基于Canvas的在线绘图应用程序的源代码。接下来,我们将深入探讨HTML5 Canvas以及如何利用它来创建自定义的绘图工具。 1. **...

    HTML5绘制变形图形3.pdf

    HTML5 是一种强大的 web 开发技术,特别是在图形绘制方面,它提供了 Canvas API,使得开发者能够直接在浏览器上绘制丰富的交互式图形。本文档主要聚焦于使用 HTML5 的 Canvas API 来实现图形的变形和组合效果,以及...

    html5绘制坦克

    总的来说,“html5绘制坦克”项目涉及HTML5的Canvas API,JavaScript编程,键盘事件监听,以及基本的2D图形绘制和动画原理。通过这个项目,你可以深入学习Web前端开发中的图形处理技术,同时提升对交互式应用的理解...

Global site tag (gtag.js) - Google Analytics