`

在transform实现的星系图上实现当星球转至正前方触发事件需求

    博客分类:
  • css
 
阅读更多

 

 

首先星球本身只做Y轴自转,即rotateY。只需知道星球转到正前方时的角度,即可作出响应

 

获得星球transform属性值

//星球所在div id为divTransform
var el = document.getElementById("divTransform");
var st = window.getComputedStyle(el, null);
var tr = st.getPropertyValue("-webkit-transform") ||
    st.getPropertyValue("-moz-transform") ||
    st.getPropertyValue("-ms-transform") ||
    st.getPropertyValue("-o-transform") ||
    st.getPropertyValue("transform") ||
    "FAIL";
//获得transform属性matrix值并放到数组中
var values = tr.split('(')[1].split(')')[0].split(',');

 

 

介绍transform属性值的文章

转自https://blog.csdn.net/lht748/article/details/53259128,粘贴在下面:

 

直接获取transform属性的属性值会出现matrix()二维变形或matrix3d()三维变形。matrix是矩阵的意思,其实图像的变形是把图像中每个位置的像素点乘以一个仿射矩阵,到达另外一个位置,最后把变换后的所有像素点组合起来。

matrix3d(n,n.....)的属性值是由16个值组成4乘4的仿射矩阵。

 

查阅资料得知其默认的仿射矩阵是

4*4的单位阵;对应的matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 );容易看出matrix3d的参数是通过拉伸,把矩阵变成一行(即:第2行开始每行放在第1行后面)

 

单维平移变换(像素)

仅在X轴平移,translateX(tx)对应的仿射矩阵

对应的matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, 0, 0, 1)

 

仅在Y轴平移,translateY(ty)对应的仿射矩阵

对应的matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, ty, 0, 1)

 

仅在Z轴平移,translateZ(tz)对应的仿射矩阵

对应的matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, tz, 1)

 

多维平移变换(像素):

对应的matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,tx,ty,tz,1);

 

可以看出多维平移变换的仿射矩阵是三个单维平移变换仿射矩阵的乘积,虽然矩阵的乘积不能随便换,但此处可以互换乘积顺序。

 

 

 

尺度变换和平移变换相似,同理得:

 

多维尺度变换(像素):

对应的matrix3d(cx, 0, 0, 0, 0, cy, 0, 0, 0, 0, cz, 0, 0, 0, 0, 1 );

 

单维旋转变换(弧度):

(sin(θ)和cos(θ)是三角函数,不懂的同学自行百度,θ是需要旋转的弧度)

 

仅在X轴旋转,rotateX(θ)对应的仿射矩阵

对应的matrix3d(1,0,0,0,0,cos(θ),sin(θ),0,0,-sin(θ),cos(θ),0,0,0,0,1);

 

仅在Y轴旋转,rotateY(θ)对应的仿射矩阵

对应的matrix3d(cos(θ),0,-sin(θ),0,0,1,0,0,sin(θ),0,cos(θ),0,0,0,0,1);

 

仅在Z轴旋转,rotateZ(θ)对应的仿射矩阵

对应的matrix3d(cos(θ),sin(θ),0,0,-sin(θ),cos(θ),0,0,0,0,1,0,0,0,0,1);

 

多维旋转变换(弧度):

三个轴同设置时旋转的的仿射矩阵和仅旋转单一方向有一定的关系;

三轴同时旋转时按照设置顺序的倒序进行仿射矩阵的生成,如这样的设置顺序:

rotateX(θ) rotateY(θ) rotateZ(θ)

则其仿射矩阵应该这样生成

三矩阵按顺序相乘,顺便不能变,矩阵乘法跟普通乘法不同。

不推荐rotateX(θ) rotateZ(θ) rotateY(θ)这样的顺序设置,火狐上会有问题。

 

多重3D变形

同时旋转、平移、缩放的仿射矩阵也是有规律的,通过实践得出其仿射矩阵生成规律如下:

如按照从translate、scale、rotate,坐标轴从X、Y、Z的顺序生成仿射矩阵如下:

 

同样矩阵按顺序相乘,不能更改顺序,否则就不是从translate、scale、rotate,坐标轴从X、Y、Z这样的顺序生成的仿射矩阵。

同样不推荐的设置顺序,如:rotateZ(90deg) translateX(10px)  scaleX(1) translateY(20px) translateZ(30px) rotateX(90deg) scaleY(2) scaleZ(3) rotateY(90deg)

 

理论上:如果随意设置translateX、scaleX、rotateX、translateY、scaleY、rotateY、translateZ、scaleZ、rotateZ,其仿射矩阵的生成应该是顺序设置的倒序,单维度仿射矩阵逐个相乘。并未做过实践,不保证其正确性。

至此,常用的仿射变换应该都解释完了。

 

实验:

给元素设置css属性:

 

translateX(10px) translateY(20px) translateZ(30px)  scaleX(1) scaleY(2) scaleZ(3) rotateX(90deg) rotateY(90deg) rotateZ(90deg);先平移、后缩放、再旋转

分析:

套入上述仿射矩阵得:

 

matlab计算,得出结果

浏览器中JQuery获取:matrix3d(0, 0, 3, 0, 0, -2, 0, 0, 1, 0, 0, 0, 10, 20, 30, 1),结果计算正确。

 

 

 

换一种设置顺序:先旋转、后平移、再缩放

transform: rotateX(90deg) rotateY(90deg) rotateZ(90deg) translateX(10px) translateY(20px) translateZ(30px)  scaleX(1) scaleY(2) scaleZ(3);

matlab计算:

 

浏览器中JQuery获取:matrix3d(0, 0, 1, 0, 0, -2, 0, 0, 3, 0, 0, 0, 30, -20, 10, 1),结果计算正确。

值得注意的是上述两个例子,两次属性值相同,顺序不同,得到的却是不同的仿射矩阵,因而,我们在设置transform属性值的时候要注意顺序。

 

关于transform属性获取问题

如果获取的是计算后的transform,那么它返回的是一个4*4仿射。矩阵如果是多维旋转,其返回的是运算后的仿射矩阵要获取单一属性值是困难的。三轴同时旋转,要从一个计算后的矩阵中分解出3个矩阵是困难的,一般都是知道其它2矩阵,才能得出第3个矩阵;如果是多重3D变形,其获取难度将更困难。

举个例子:给出matrix3d(0, 0, 1, 0, 0, -2, 0, 0, 3, 0, 0, 0, 30, -20, 10, 1),能确定它是包含了什么变换吗。平移?旋转?缩放?

 

如果是直接获取样式表的样式,直接元素.style.transform再对它返回的字符串进行拆分就可以获取到你在样式表上设置的值了。

var test = document.getElementById('div').style.transform

 

matrix(a,b,c,d,e,f)有位dalao做了很详细的解析,可以参考:http://www.zhangxinxu.com/wordpress/?p=2427

其中有个疑问,就是文章中解释到“x, y表示转换元素的所有坐标(变量)”,理解起来挺抽象的。

参考《数字图像处理》后发现,应该可以这样理解:

其x, y在设置偏移中心的时候是中心点的坐标;

在设置缩放、旋转、平移的时候应该是元素的像素坐标,其实就是像素点在元素中的坐标。

 

总结:我们在用transform的时候,所用的translate、scale、rotate,不过是修改仿射矩阵上的数值。如果单单用这些属性会被限制住,用仿射矩阵可以做一些translate、scale、rotate做不到的事情,比如我随便构造一个4*4的仿射矩阵,套用到元素中,会发生一些奇怪的事。还可参考:http://www.zhangxinxu.com/wordpress/?p=2427,一个简单的2D镜像对称例子,怎么构造出有用的仿射矩阵,我还有待研究。总之,先把笔记做好......。

 

循环解析transform属性值

使用setInterval方法,循环获得transform属性值,从上面的文章可以看到只有rotateY时,矩阵第一个值(也就是本文开头values数组中第一个值)是cos。另外当求转到正前方时我们设置的是0度。因此setInterval内部方法可以设置条件values[0]在0.95~1时触发事件(0.95这个值可自己根据情况设置)

分享到:
评论

相关推荐

    Java毕业设计-ssm-jsp-高校疫情防控出入信息管理系统(源码+sql脚本+32页零基础部署图文详解+29页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借ssm框架(Spring+SpringMVC+MyBatis)搭建后台。用MySQL存储数据,可靠性强。 能学到什么: 使用ssm搭建后台。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    qt5-qtlocation-doc-5.9.7-1.el7.x64-86.rpm.tar.gz

    1、文件内容:qt5-qtlocation-doc-5.9.7-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/qt5-qtlocation-doc-5.9.7-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    【数据驱动】基于matlab永磁同步电机PMSM和柔性负载PMSM数据驱动控制【含Matlab源码 11154期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Java毕业设计-ssm-jsp-中小企业人力资源管理系统(源码+sql脚本+32页零基础部署图文详解+31页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借ssm框架(Spring+SpringMVC+MyBatis)搭建后台。用MySQL存储数据,可靠性强。 能学到什么: 使用ssm搭建后台。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    rhdb-utils-9.2.0-5.el7.x64-86.rpm.tar.gz

    1、文件内容:rhdb-utils-9.2.0-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/rhdb-utils-9.2.0-5.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    qt5-qttools-5.9.7-1.el7.x64-86.rpm.tar.gz

    1、文件内容:qt5-qttools-5.9.7-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/qt5-qttools-5.9.7-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    Java毕业设计-ssm-vue-学院学生论坛(源码+sql脚本+32页零基础部署图文详解+33页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借ssm框架(Spring+SpringMVC+MyBatis)搭建后台。用MySQL存储数据,可靠性强。 能学到什么: 使用ssm搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    细粒度原型蒸馏用于小样本目标检测.zip

    细粒度原型蒸馏用于小样本目标检测,含有完整的代码和论文

    Involution.zip

    Involution,含有完整的代码和论文

    rngom-javadoc-201103-0.8.20120119svn.el7.x64-86.rpm.tar.gz

    1、文件内容:rngom-javadoc-201103-0.8.20120119svn.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/rngom-javadoc-201103-0.8.20120119svn.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    基于NSGAII算法的七次非均匀B样条轨迹规划-时间能量冲击优化及通用关节值应用,matlab-B样条轨迹规划-1 七次非均匀B样条轨迹规划, 基于NSGAII的时间-能量-冲击最优 上自己的关节

    基于NSGAII算法的七次非均匀B样条轨迹规划——时间能量冲击优化及通用关节值应用,matlab-B样条轨迹规划-1 七次非均匀B样条轨迹规划, 基于NSGAII的时间-能量-冲击最优。 上自己的关节值和时间就能用,简单好用, ,核心关键词:matlab; 七次非均匀B样条轨迹规划; NSGAII; 时间-能量-冲击最优; 关节值; 简单好用。,"MATLAB实现七次非均匀B样条轨迹规划算法:时间-能量-冲击最优"

    Java毕业设计-ssm-jsp-购物商城系统(源码+sql脚本+32页零基础部署图文详解+35页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借ssm框架(Spring+SpringMVC+MyBatis)搭建后台。用MySQL存储数据,可靠性强。 能学到什么: 使用ssm搭建后台。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    基于专家混合架构的高级视觉-语言模型DeepSeek-VL2及其多模态理解应用

    内容概要:DeepSeek-VL2是一款基于专家混合架构的大型视觉-语言模型,它在图像识别和自然语言处理方面显著改进,采用了动态拼贴编码策略以及多头潜在注意力机制。其优势在于高效的训练和推理性能,尤其擅长高分辨率图片和复杂视觉-文本任务的处理,涵盖光学字符识别、表格解析、图文理解和视觉问答等多个应用场景。文中提到的三种不同规模的变体,参数量分别为1.0亿、2.8亿和4.5亿,均展示了强大的竞争力。研究团队还在GitHub发布了开源代码和预训练模型以供公众下载和进一步研究。此外,文中介绍了模型使用的多种高质量数据集及细致的数据增强方法,并讨论了一些未来的发展方向。 适合人群:计算机视觉和自然语言处理领域的研究人员,AI系统开发从业者,机器学习爱好者。 使用场景及目标:1.用于高分辨率图像处理;2.提高视觉与文本融合任务的效果;3.支持跨领域(如教育、医学等)的具体应用。 其他说明:本文强调的技术创新点包括但不限于动态分割技术,该技术解决了图像大小变化的问题;还有多层注意力压缩机制提高了推断效率等问题。同时论文指出了当前版本存在的局限性比如对话上下文窗口小、模糊物体识别困难等问题并展望了后续优化路径。

    西门子Smart 200系列PLC与触摸屏双轴卷取分切机程序,精准控制张力与版型,附完整注释与设备图纸,双轴卷取分切机程序,PLC和触摸屏使用西门子smart200系列 前后卷取双轴张力控制计算

    西门子Smart 200系列PLC与触摸屏双轴卷取分切机程序,精准控制张力与版型,附完整注释与设备图纸,双轴卷取分切机程序,PLC和触摸屏使用西门子smart200系列。 前后卷取双轴张力控制计算。 利用变频器模拟量输出控制张力。 卷取版型较好。 内部张力梯度算法理解后可用于恒张力卷取设备。 程序有完整注释,完整的设备图纸,方便理解阅读。 只包含PLC和触摸屏程序以及设备电路图 ,核心关键词:双轴卷取分切机程序; PLC; 触摸屏; 西门子smart200系列; 前后卷取双轴张力控制计算; 变频器模拟量输出控制张力; 卷取版型; 内部张力梯度算法; 程序注释; 设备图纸; 设备电路图。,西门子Smart200系列双轴卷取分切机程序:张力控制与变频模拟化操作指南

    qt5-qtsensors-5.9.7-1.el7.x64-86.rpm.tar.gz

    1、文件内容:qt5-qtsensors-5.9.7-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/qt5-qtsensors-5.9.7-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    webapiapi开发apikaifa这个是apiwebappi

    webapiapi开发apikaifa这个是apiwebappi

    MATLAB声发射b值或ib值动态计算源码资料包:可调窗口参数滑动计算功能,MATLAB滑动计算声发射b值或ib值m文件源码资料包(动态最值或全局最值,计算窗口、滑动窗口等参数可调) ,核心关键词:

    MATLAB声发射b值或ib值动态计算源码资料包:可调窗口参数滑动计算功能,MATLAB滑动计算声发射b值或ib值m文件源码资料包(动态最值或全局最值,计算窗口、滑动窗口等参数可调) ,核心关键词:MATLAB; 声发射; b值或ib值; 滑动计算; 动态最值; 全局最值; 计算窗口; 滑动窗口; 参数可调; m文件源码; 资料包,MATLAB声发射B值/IB值计算源码包(支持滑动窗口与动态/全局最值)

    Java毕业设计-ssm-jsp-电脑配件销售系统(源码+sql脚本+32页零基础部署图文详解+34页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借ssm框架(Spring+SpringMVC+MyBatis)搭建后台。用MySQL存储数据,可靠性强。 能学到什么: 使用ssm搭建后台。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    不同平台本地部署DeepSeek的人工智能部署指南

    内容概要:本文详细介绍了在Windows、Linux以及macOS三种不同操作平台上利用两种主要方法(Ollama和LM Studio)来部署深度学习模型DeepSeek的具体步骤。针对每个系统,分别列出了必要的准备工作,像是下载和安装必需的程序组件或是执行特定命令,还提供了通过不同工具加载、运行DeepSeek的方式指导,包括模型下载来源的选择及其指令的用法等。无论是通过Ollama还是LM Studio部署,在所有平台上的流程都覆盖了详细的环境搭建及模型启动指南,并对可能出现的一些注意事项进行了简述,为初次尝试的用户提供全面的支持。 适用人群:适合需要将AI模型应用于本地环境中,尤其对于想要了解如何快速上手DeepSeek模型的实际应用的技术爱好者或开发者。 使用场景及目标:帮助有兴趣使用DeepSeek模型开展科研、项目或者个人实验的用户能够顺利地完成在自己设备上从零起步的部署任务;使用户掌握在各种操作系统环境中部署大型语言模型的基本方法,提高工作效率,降低入门门槛。 其他说明:文中提供的具体命令可能随时间和官方更新而有所变化,请参照官方最新发布资料。此外,对于硬盘容量等硬件条件也给出了明确的需求指引,保障了部署的成功率。

    西门子S7-威纶通触摸屏一拖三恒压供水全套图纸程序设计方案,一拖三恒压供水全套图纸程序 威纶通触摸屏 西门子s7- ,核心关键词:一拖三恒压供水; 全套图纸程序; 威纶通触摸屏; 西门子s7

    西门子S7-威纶通触摸屏一拖三恒压供水全套图纸程序设计方案,一拖三恒压供水全套图纸程序 威纶通触摸屏 西门子s7- ,核心关键词:一拖三恒压供水; 全套图纸程序; 威纶通触摸屏; 西门子s7-。,一拖三恒压供水方案全解:威纶通屏控西门子s7-程序图纸集

Global site tag (gtag.js) - Google Analytics