css3 matrix 矩阵

2D矩阵变换

matrix(1,0,0,1,0,0) 对应 matrix (a,b,c,d,e,f)

其中,xy表示转换元素的所有坐标(变量)了,

3*3矩阵每一行的第1个值与后面1*3的第1个值相乘,第2个值与第2个相乘,第3个与第3个,然后相加

ax+cy+e为变换后的水平坐标,bx+dy+f表示变换后的垂直位置

偏移:e---水平偏移距离    f-----垂直偏移距离  css3单位px

现在,我们根据这个矩阵偏移元素的中心点,假设是(0, 0),即x=0y=0

假设 x y 偏移30px

x坐标就是 ax+cy+e = 1*0+0*0+30 =30
y坐标就是 bx+dy+f = 0*0+1*0+30 =30

缩放: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(1,tan(θy),tan(θx),1,0,0);
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θ,0,0)
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表示则还要计算cossin值:transform: matrix(0.866025,0.500000,-0.500000,0.866025,0,0);

css3 直接: transform:rotate(30deg);

镜像对称效果:

轴围绕的那个点就是CSS3中transform变换的中心点,自然,镜像对称也不例外。因为该轴永远经过原点,因此,任意对称轴都可以用y = k * x表示

matrix表示就是:

matrix((1-k*k) / (1+k*k), 2k / (1 + k*k), 2k / (1 + k*k), (k*k - 1) / (1+k*k), 0, 0)

如下图,已经y=kx,并且知道点(x, y)坐标,求其对称点(x’, y’)的坐标?

很简单,一是垂直,二是中心点在轴线上,因此有:

(y-y‘) / (x - x‘) = -1/ k → ky-ky‘ = -x+x‘ //两条直线垂直,它们的斜率互为负倒数
(x + x‘) / 2 * k = (y + y‘)/2 → 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 = (1-k*k)/(k*k+1);
b = 2k/(k*k+1);
c = 2k/(k*k+1);
d = (k*k-1)/(k*k+1);

也就是上面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;   后面元素不可见

原文地址:https://www.cnblogs.com/xuey/p/8444251.html

时间: 2024-10-10 14:19:32

css3 matrix 矩阵的相关文章

理解CSS3 transform中的Matrix(矩阵)

一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵)”的时候,难免会心生畏惧(即使你已经学过),正常心理.实际上,这玩意确实有点复杂. 然而,这却是屌丝逆袭的一个好机会. CSS同行间:你是不是有这样的感觉:哎呀呀,每天就是对着设计图切页面,貌似技术没有得到实质性地提升啊,或者觉得日后高度有限! 我们应该都知道二八法则(巴莱多定律),即任何一组东西中

css3 transform中的matrix矩阵

CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示意图:3D变换则是4*4的矩阵. 有些迷糊?恩,我也觉得上面讲述有些不合时宜.那好,我们先看看其他东西,层层渐进——transform属性. 具体关于transform属性具体内容可以点击这里补个课.稍微熟悉的人都知道,transform中有这么几个属性方法: .trans_skew { trans

css3 matrix 2D矩阵和canvas transform 2D矩阵

一看到“2D矩阵”这个高大上的名词,有的同学可能会有种畏惧感,“矩阵”,看起来好高深的样子,我还是看点简单的吧.其实本文就很简单,你只需要有一点点css3 transform的基础就好. 没有前戏,直奔主题 2D矩阵指的是元素在2D平面内发生诸如缩放.平移.旋转.拉伸四种变化,在css3中对应4个方法分别是scale().translate().rotate()和skew(),可以说这4个方法是css3矩阵matrix的快捷方式,因为这4个方法本质都是由matrix实现的.类似地,在canvas

理解CSS3 transform中的Matrix(矩阵)——张鑫旭

by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2427 一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵)”的时候,难免会心生畏惧(即使你已经学过),正常心理.实际上,这玩意确实有点复杂. 然而,这却是屌丝逆袭的一个好机

[ css 矩阵 Matrix 属性 ] css中transform的Matrix(矩阵)属性讲解及实例演示的区别

一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵)”的时候,难免会心生畏惧(即使你已经学过),正常心理.实际上,这玩意确实有点复杂. 然而,这却是屌丝逆袭的一个好机会. CSS同行间:你是不是有这样的感觉:哎呀呀,每天就是对着设计图切页面,貌似技术没有得到实质性地提升啊,或者觉得日后高度有限! 我们应该都知道二八法则(巴莱多定律),即任何一组东西中

matrix矩阵

matrix(a,b,c,d,e,f) x’        | a c e  |     x y’    =  | b d f  |     y 1        |  0 0 1  |    1 这就是矩阵的运算了,简化为公式:x’=ax+cy+ey’=bx+dy+f css3的transform属性很好用,其实可以变换为matrix矩阵工作,只需要给abcdef附上相应的值就可以了. 比如translate(tx,ty)可以由matrix(1,0,0,1,tx,ty)转换而来,计算方法见公式

UVA 11149 - Power of Matrix(矩阵倍增)

UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞,∑kiAi=(1+Ak/2)∑k/2iAi,不断二分即可 代码: #include <cstdio> #include <cstring> const int N = 45; int n, k; struct mat { int v[N][N]; mat() {memset(v, 0, sizeof(v));} mat operator * (mat

Android Matrix矩阵详解

Android中有两个比较重要的矩阵,ColorMatrix和Matrix.ColorMatrix用来改变bitmap的颜色和透明度,Matrix用来对bitmap平移.缩放.错切. ColorMatrix(色彩矩阵) Android中Bitmap色彩用了一个[R, G, B, A],4*1的矩阵来保存. 如果想改变一个Bitmap的色彩该怎么办?现在来了解下ColorMatrix的相关知识.ColorMatrix 是一个4*5的矩阵. 我们用[R', G', B', A']来保存新的bitma

FZU 1911 Construct a Matrix ( 矩阵快速幂 + 构造 )

FZU 1911 Construct a Matrix (  矩阵快速幂 + 构造 ) 题意: 需要构造一个矩阵满足如下要求: 1.矩阵是一个S(N)*S(N)的方阵 2.S(N)代表斐波那契数列的前N项和模上M 3.矩阵只能由1, 0, -1组成 4.矩阵每行每列的和不能相等 Here, the Fibonacci numbers are the numbers in the following sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 1