Canvas的图形变换
2016-05-19 10:23
218 查看
在图形学中,一般先画出原形,再通过图像变换得到目的图形
Canvas提供的图形变换API:
位移:translate(x,y)
旋转:rotate(deg)
缩放:scale(se,sy):不单只放大图形大小,也会放大其他属性
!在Canvas的图形变换函数是叠加的,
所以:
绘制前:context.save()
绘制后:context.restore()
|a c e|
|b d f|
|0 0 1|
a水平缩放(默认1)
b水平倾斜(默认0)
c垂直倾斜(默认0)
d垂直缩放(默认1)
e水平位移(默认0)
f垂直位移(默认0)
设置变换矩阵 :
transform(a,b,c,d,e,f):与之前transfrom效果叠加
settransform(a,b,c,d,e,f):与之前transfrom效果无关
Canvas提供的图形变换API:
位移:translate(x,y)
旋转:rotate(deg)
缩放:scale(se,sy):不单只放大图形大小,也会放大其他属性
!在Canvas的图形变换函数是叠加的,
所以:
绘制前:context.save()
绘制后:context.restore()
function drawStar(cxt,x,y,R,rot){ cxt.save(); //图形变换 cxt.translate(x,y); cxt.rotate(rot/180*Math.PI); cxt.scale(R,R); cxt.beginPath(); starPath(cxt); cxt.closePath(); cxt.fillStyle="#fb3"; cxt.fill(); cxt.restore(); } function starPath(cxt){ cxt.beginPath(); for(var i=0;i<5;i++) { cxt.lineTo( Math.cos((18 + i * 72) / 180 * Math.PI), -Math.sin((18 + i * 72 )/180 * Math.PI) ); cxt.lineTo( Math.cos(( 54 + i * 72) /180 * Math.PI)*0.5, -Math.sin((54 + i * 72) /180 * Math.PI)*0.5 ); } cxt.closePath(); }变换矩阵
|a c e|
|b d f|
|0 0 1|
a水平缩放(默认1)
b水平倾斜(默认0)
c垂直倾斜(默认0)
d垂直缩放(默认1)
e水平位移(默认0)
f垂直位移(默认0)
设置变换矩阵 :
transform(a,b,c,d,e,f):与之前transfrom效果叠加
settransform(a,b,c,d,e,f):与之前transfrom效果无关
相关文章推荐
- keans++算法
- C#判断一个string是否为数字
- 在项目名字上有一个红色的叹号怎么办?
- CentOS 基本设置
- Unity3D 之2D动画机
- iOS组件化思路-大神博客研读和思考
- js中对函数设置默认参数值的3种方法
- ubuntu14.4 使用root登陆和vm中下载慢的解决办法
- jquery-1.12.3
- Date::Manip, DateCalc(), UnixDate()
- Java性能优化攻略详解
- Android Studio layout分组
- jQuery转Vue项目实践总结
- 文章标题
- 【Android】带进度条的WebView
- "Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver"-------续文
- Qt5.5和5.4在opengl中setUpdateBehavior函数引起的问题
- mac下增加eclipse内存
- 解决Android Studio2.0不能使用HttpClient
- webdriver获取input元素值的几种方法