css3 matrix 矩阵
2D矩阵变换
matrix(1,0,0,1,0,0) 对应 matrix (a,b,c,d,e,f)

其中,x, y表示转换元素的所有坐标(变量)了,
3*3矩阵每一行的第1个值与后面1*3的第1个值相乘,第2个值与第2个相乘,第3个与第3个,然后相加
ax+cy+e为变换后的水平坐标,bx+dy+f表示变换后的垂直位置
偏移:e---水平偏移距离 f-----垂直偏移距离 css3单位px
现在,我们根据这个矩阵偏移元素的中心点,假设是(0, 0),即x=0, y=0。
假设 x y 偏移30px
x坐标就是 ax+cy+e = *+*+ =
y坐标就是 bx+dy+f = *+*+ =
缩放:a---缩放X 水平 d----缩放Y垂直 css3单位 num
假设 s 代表 缩放
x' = ax+cy+e = s*x+0*y+0 = s*x;
y' = bx+dy+f = 0*x+s*y+0 = s*y;
也就是matrix(sx, 0, 0, sy, 0, 0);,等同于scale(sx, sy);
拉伸:b---拉伸Y垂直 c-----拉伸X 水平 css3单位弧度angle
matrix(,tan(θy),tan(θx),,,);
tanValY = Math.tan(deg * Math.PI / 180);
tanValX = Math.tan(deg * Math.PI / 180);
x' = x+y*tan(θx)+0 = x+y*tan(θx)
y' = x*tan(θy)+y+0 = x*tan(θy)+y
对应于skew(θx + "deg",θy+ "deg")这种写法
旋转:a b c d 4个值 css3单位弧度angle
matrix(cosθ,sinθ,-sinθ,cosθ,,)
cosVal = Math.cos(deg * Math.PI / 180);
sinVal = Math.sin(deg * Math.PI / 180);
x' = x*cosθ-y*sinθ+0 = x*cosθ-y*sinθ
y' = x*sinθ+y*cosθ+0 = x*sinθ+y*cosθ deg=30; //角度
cos=Math.cos(30 * Math.PI / 180);
deg2=Math.acos(cos) * 180 / Math.PI; // 反三角函数
rotate(θdeg)这种书写形式要比matrix简单多了,首先记忆简单,其次,无需计算。例如,旋转30°
matrix表示则还要计算cos, sin值:transform: matrix(0.866025,0.500000,-0.500000,0.866025,0,0);
css3 直接: transform:rotate(30deg);
镜像对称效果:
轴围绕的那个点就是CSS3中transform变换的中心点,自然,镜像对称也不例外。因为该轴永远经过原点,因此,任意对称轴都可以用y = k * x表示
则matrix表示就是:
matrix((-k*k) / (+k*k), 2k / ( + k*k), 2k / ( + k*k), (k*k - ) / (+k*k), , )
如下图,已经y=kx,并且知道点(x, y)坐标,求其对称点(x’, y’)的坐标?

很简单,一是垂直,二是中心点在轴线上,因此有:
(y-y') / (x - x') = -/ k → ky-ky' = -x+x' //两条直线垂直,它们的斜率互为负倒数
(x + x') / 2 * k = (y + y')/ → kx+kx' = y+y'
很简单的,把x'和y'提出来,就有:
x' = (1-k*k)/(k*k+1) *x + 2k/(k*k+1) *y;
y' = 2k/(k*k+1) *x + (k*k-1)/(k*k+1) *y;
再结合矩阵公式:
x' = ax+cy+e;
y' = bx+dy+f;
我们就可以得到:
a = (-k*k)/(k*k+);
b = 2k/(k*k+);
c = 2k/(k*k+);
d = (k*k-)/(k*k+);
也就是上面matrix方法中的参数值啦!
3D变换中的矩阵
矩阵里头是从3*3变成4*4, 9到16, 2D 变换 加一个 Z轴
matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1)

perspective :透视 --- 距离多远看图像
如果父元素 perspective :200px ;(因为元素远去,我们眼睛看到的就会变小);translateZ值越大,该元素也会越来越大,当translateZ值非常接近200像素,但是不超过200像素的时候 (如199像素),该元素的大小就会撑满整个屏幕(如果父辈元素没有类似overflow:hidden的限制的话)。
perspective-origin眼睛看的位置,默认就是所看舞台或元素的中心 ,值为: left center right length % ; perspective-origin: x-axis y-axis;
transform-style: preserve-3d 表示3D透视
backface-visibility: hidden; 后面元素不可见
css3 matrix 矩阵的更多相关文章
- 【CSS3】 理解CSS3 transform中的Matrix(矩阵)
理解CSS3 transform中的Matrix(矩阵) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu ...
- 理解CSS3 transform中的Matrix(矩阵)
一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵) ...
- css3 matrix 2D矩阵和canvas transform 2D矩阵
一看到“2D矩阵”这个高大上的名词,有的同学可能会有种畏惧感,“矩阵”,看起来好高深的样子,我还是看点简单的吧.其实本文就很简单,你只需要有一点点css3 transform的基础就好. 没有前戏,直 ...
- 理解CSS3 transform中的Matrix(矩阵)——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2427 一.哥,我被你 ...
- css3 transform中的matrix矩阵
CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示 ...
- 前端matrix矩阵的变化
css3 transform中的matrix矩阵 CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform), ...
- HDU5015 233 Matrix(矩阵高速幂)
HDU5015 233 Matrix(矩阵高速幂) 题目链接 题目大意: 给出n∗m矩阵,给出第一行a01, a02, a03 ...a0m (各自是233, 2333, 23333...), 再给定 ...
- String数据转Matrix矩阵
String数据转Matrix矩阵 private Matrix String_To_Matrix(string str) { int[] Remove_Num = new int[10]; int ...
- Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作) 题目描述 在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据 ...
随机推荐
- springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
解决办法一 yml或者Properties文件中配置 spring.freemarker.check-template-location=false 解决办法二 @SpringBootApplicat ...
- SpringBoot表单验证
需求:年龄在18岁以下的女生不能注册 处理器中的写法: 实体类中的写法:
- linux 中更改权限命令chown,chmod,chgrp
写在前面,关于chown,chmod的区别 chown用法 用来更改某个目录或文件的用户名和用户组的 chown 用户名:组名 文件路径(可以是就对路径也可以是相对路径) 例1:chown root: ...
- Codeforces 960F 线段树
题意:https://blog.csdn.net/qq_39809664/article/details/79871282 思路:我们考虑LIS的状态转移,对于这个题,假设现在扫描到的边是(u, v, ...
- explode()与相反函数 implode() 和join()
explode()的函数原型: array explode(string separator,string input [,int limit]); //[,int limit]是表示可选的意思 参数 ...
- linq组合查询时属性扩展问题
学习linq的过程中,做一个表格的条件查询并且分页显示.显示的出的数据需要经过属性拓展来实现将需要给用户看的值显示出来. 后台绑定数据时用的是上下文---- if(!ispostback){ usin ...
- 数据库之_CRUD
CRUD是指在做计算处理时的增加(Create).读取查询(Retrieve).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中DataBase或者持久层的基本 ...
- 使用VBSCRIPT安装字体
根据新系统要求,经常要部署一些原来系统里没有的字体,原先我为了图省事经常会要求用户手动安装字体文件,虽然Windows的易用性做得相当不错,但是仍然要照顾一些不会安装字体的人,其实把这些字体打包进安装 ...
- IFC数据模式架构的四个概念层详解说明
IFC模型体系结构由四个层次构成,从下到上依次是 资源层(Resource Layer).核心层(Core Layer).交互层(Interoperability Layer).领域层(Domain ...
- 怎么把网页保存为pdf文件
不就是用chrome浏览器打印功能,然后保存为pdf就可以了吗? 对于一些结构简单的比如,RFC文档这样操作一般没什么问题,对于一些有浮动元素的网页就不好说了,必须先用chrome的审查元素把一些不必 ...