css的transform样式计算-第一节

news2024/11/20 9:47:14

本文作者为 360 奇舞团前端开发工程师

引言

在使用 css 样式进行样式的缩放、旋转等设置时,思考了一下它的较浅层的原理,恩,这个阶段都 是一些初高的数学计算,从新看这里的时候顺便捡了捡初高中的数学,比如三角函数之类。

通用公式

dd0cda9e6a0e1757158521cb48c42cde.png
image.png

假设 A * B = Y。其中,A 为 m * n 的 m 行 n 列矩阵,B 为 1 * n 列的矩阵。B 拆分为列向量,并且列向量的维数就是矩阵的行数。

方法

transform(a, b, c, d, e, f) 与 Matrix 的转换。

d6bd7d89578ed88d248239ed3147e367.png
image.png

推导出来

6dfac079a3c6bb673f79d82bc9501639.png
image.png

简化后

6ce0bc8071f22d734afc92edd836646a.png
image.png

缩放

8fe56a7a0044e945e0c0b34c37d1f7f2.png
image.png

推导出来

7c3271b4590b04934e3e3ebc1d0b0a68.png
image.png
.box {
  transform: scale(0.3, 0.6);
}

通过计算

110d7c1f7cf5eba9e0b0fef2805a2d7a.png
image.png

等价于

.box {
  transform: matrix(0.3, 0, 0, 0.6, 0, 0);
}
1a2137d51690fb0b17e8f30c9458a0a3.png
image.png

平移

487adda37ddcaf3c81144e2dc1a0147c.png
image.png

推导出来

9121456f05509fdb04657c6ed4213442.png
image.png

转旋

7cd41212eba12421caa10a78985c840a.png
image.png

推导出来

a521a27799a31729140b9e5b53d007c4.png
image.png

假设存在点 E 移动至点 F。设 E 坐标为(x1, y1),F 坐标为(x2, y2),D 坐标为(a, b)。

简要图示:

30955ceea9f9cdb1be81fc42b9543bdf.png
image.png

初中数学:

81a40f01f69674ca4539b7af173eb2ae.png
image.png

演算:

ef4647b4f06026ee8e0e30df3188b6df.png
image.png

推导:

70a743f721d9c0c26de5094c5f35d8cd.png
image.png
2b2bd94d767d29b6babf6e1eab5302e9.png
image.png

验证:

c12f8ce39ac985c6c6a902f6218c43d0.png
image.png

转换为矩阵:

e5771e861e8f983ac63e749e097bce0b.png
image.png

从 css 语法上开始转换

.box {
  transform: rotate(30deg);
}

这个旋转套用公式

ca7518b8bc12f437387a686b8857b633.png
image.png

等价于

.box {
  transform: matrix(0.86, 0.5, -0.5, 0.86, 0, 0);
}
4278a59a0d9daf3559c163a4d350ba42.png
image.png

复合

.box {
  transform: rotate(30deg) scale(0.3, 0.6);
}

复合需要进行矩阵乘法计算

951c64dd3311eee70a6942a4f57e5416.png
image.png

等价于

.box {
  transform: matrix(0.258, 0.15, -0.3, 0.516, 0, 0);
}

最后,后续本文修正和更新,请参阅:'https://kangkk.cn/index.php/计算机原理/仿射变换'

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

4153ce9fe0c90a29d141884b4f51bed3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重生之我要学C++第七天(匿名对象、内部类)

构造函数的隐式类型转化 1.单参数构造函数隐式类型转换 来看下面的代码 #include<iostream> using namespace std; class A { public:A(int x){_a x;} private:int _a; }; int main() {A a 3;return 0; } 此处这句代码 A a 3; 对于这里&#xff0c;编译完全正确&…

【Java从0到1学习】07 Java异常

尽管人人希望自己身体健康&#xff0c;处理的事情都能顺利进行&#xff0c;但在实际生活中总会遇到各种状况&#xff0c;比如感冒发烧&#xff0c;工作时电脑蓝屏、死机等。同样&#xff0c;在程序运行的过程中&#xff0c;也会发生各种非正常状况&#xff0c;比如程序运行时磁…

工作区与GOPATH

在学习go语言时&#xff0c;我们会从官网下载go语言的二进制包&#xff0c;然后解压并安装到某个目录&#xff0c;最后会配置环境变量&#xff0c;通过输入命令go version来验证是否安装成功。 配置了path环境后&#xff0c;我们还需要再配置3个环境变量&#xff0c;GOROOT、G…

Stable Diffusion - 哥特 (Goth) 风格服装与背景的 LoRA 配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132177882 图像来源于 Goth Clothing 的 LoRA 效果&#xff0c;配合哥特 (Goth) 风格服饰的相关提示词。 测试模型&#xff1a;DreamShaper 8 哥…

websocket+node实现直播(弱鸡版)

心血历程 这部分主要是写在写这些的时候遇到的问题以及换思路的过程&#xff0c;可以之间看正文 在之前我也写过直播功能&#xff0c;并且与websocket相结合实现了直播弹幕。只不过直播是使用的腾讯云的&#xff0c;而不是手写的直播推流拉流&#xff0c;这次又有一个新的项目…

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

4月官宣创业&#xff0c;6月15日发布第一款7B开源模型&#xff0c;7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度&#xff0c;8月8日&#xff0c;百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B&#xff08;以下简称“53B”&a…

运维作业5

一.基于 CS 7 构建 LVS-DR 群集。 1.lvs安装ipvsadm [rootnode ~]# yum install -y ipvsadm 2.配置lvs虚拟ip&#xff08;vip&#xff09; [rootnode ~]# ifconfig ens32:200 192.168.72.200 netmask 255.255.255.0 up 客户端测试&#xff1a; 3.在两台rs上安装httpd 4.两台rs建…

SpringBoot3之Web编程

标签&#xff1a;Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖&#xff0c;SpringBoot可以快速启动一个web容器&#xff0c;简化项目的开发&#xff1b; 在web开发中又涉及如下几个功能点&#xff1a; 拦截器&#xff1a;可以让接口被访问之前&#xff0c;将请求拦截…

Oracle 聚合拼接的常用方式

Oracle常用函数&#xff1a;Oracle Database SQL Language Reference, 12c Release 2 (12.2) 1 listagg LISTAGG Syntax Description of the illustration listagg.eps (listagg_overflow_clause::, order_by_clause::, query_partition_clause::) listagg_overflow_claus…

【C++基础(九)】C++内存管理--new一个对象出来

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C内存管理 1. 前言2. new2.1 new的使用方法2.2 …

RestTemplate发送请求携带文件

在工作上遇到这样一个需求&#xff0c;就是调用我们公司的AI平台&#xff0c;将图片文件发送给他们&#xff0c;他们进行解析然后返回解析结果。 首先用python进行调用一次&#xff0c;发送捕获的接口是这样的&#xff1a; 那么用java代码该如何组装这个请求发送过去呢&#xf…

MIT6.006 课程笔记P1 - 思考如何进行 PeakFinding

文章目录 寻找峰值 peak暴力算法分而治之从1D到2D朴素算法Attemp#2 寻找峰值 peak 给出一个数组 a b c d e f g h i 并给予数字 index 1 2 3 4 5 6 7 8 9 那么如果某个数字是 peak &#xff0c;那么他将 大于等于左边的数 且 大于等于右边的数 或者 a > b 这里的 a 也是峰值…

Pytest测试框架4

目录&#xff1a; pytest配置文件pytest插件pytest测试用例执行顺序自定义pytest-orderingpytest测试用例并行运行与分布式运行pytest内置插件hook体系pytest插件开发 1.pytest配置文件 pytest.ini 是什么&#xff1f; pytest.ini 是 pytest 的配置文件可以修改 pytest 的…

Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

一.Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 本次测试使用数据库实例SqlServer2008r2版 错误详细&#xff1a; 标题: Microsoft SQL Server Management Studio ------------------------------ 还原数据库“Mvc_HNHZ”时失败。 (Microsoft.SqlServer.…

Java笔记(三十一):MySQL(中)--查询DQL、单表查询、函数、多表查询、查询结果合并

六、查询DQL⭐⭐⭐⭐⭐&#xff08;SELECT&#xff09; 0、查询书写顺序&执行顺序 当selcet中有聚合函数时&#xff0c;看起来是 select 先执行&#xff0c;因为后面having可以用到selcet聚合函数后面的别名 但实际上还是select 后执行&#xff0c;如果不是聚合函数或者其…

C#,数值计算——基于模拟退火的极小化问题单纯形(下山)算法的计算方法与C#源程序

1 模拟退火 模拟退火算法其实是一个类似于仿生学的算法&#xff0c;模仿的就是物理退火的过程。 我们炼钢的时候&#xff0c;如果我们急速冷凝&#xff0c;这时候的状态是不稳定的&#xff0c;原子间杂乱无章的排序&#xff0c;能量很高。而如果我们让钢水慢慢冷凝&#xff0c…

PowerDesigner使用实践

PowerDesigner使用实践 一、前言 1.简介 PowerDesigner DataArchitect 是业界领先的数据建模工具。 它提供了一种模型驱动的方法来增强业务和 IT 的能力并使其保持一致。 PowerDesigner 使企业能够更轻松地可视化、分析和操作元数据&#xff0c;以实现有效的企业信息架构。 …

通向架构师的道路之weblogic的集群与配置

一、Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2&#xff0c;使用Apache HttpServer做请求派发。 现在看看WebLogic的集群吧&#xff0c;其实也差不多。 区别在于&#xff1a; Tomcat的集群的实现为两个物理上…

Kotin协程的基础

协程是什么&#xff1f; 就是同步方式去编写异步执行的代码。协程是依赖于线程&#xff0c;但是协程挂起的时候不需要阻塞线程。几乎没有任何代价。 协程的创建 一个线程可以创建多个协程。协程的创建是通过CoroutineScope创建&#xff0c;协程的启动方式有三种。 runBlockin…

湘大oj1088 N!:求阶乘 数据太大怎么处理 常规的递归求阶乘

一、链接 N&#xff01; 二、题目 Description 请求N&#xff01;&#xff08;N<10000&#xff09;&#xff0c;输出结果对10007取余 输入 每行一个整数n&#xff0c;遇到-1结束。 输出 每行一个整数&#xff0c;为对应n的运算结果。 Sample Input 1 2 -1 Sample Outp…