Snap.svg对原生的svg进行了封装,为svg的创建、操作提供了便捷的方法,但是官网的文档对一些概念没有解释,难免会造成困扰。比如说路径的旋转,就存在变换后得不到路径交点的问题。

用普通的变换得不到路径的相交点

Snap.svg提供了:

  • Matrix.rotate(angle) 方法,将变换矩阵旋转一定角度。
  • Matrix.toTransformString()方法,可以将变换矩阵转成变换字符串
  • Element.transform(transformString)方法,将变换应用到元素

变换矩阵涉及到图形学的内容,可参看3D计算机图形学(原书第三版 ,第一章。

很直接的,我们会想到用这三个函数来实现变换:

let myElem = Snap('.myElem');
let angle = 45 , matrix = new Snap.Matrix();
matrix.rotate(angle);   //变换矩阵旋转45度
myElem.transform(matrix);  //将变换应用到元素

这样确实是可以实现效果的,demo1。但是,这种变换不改变元素的定义,如果用在路径上,将造成路径的计算错误。比如一条路径:(0,0),(400,400),经过上面的变换后,其定义还是(0,0),(400,400),那么此时计算它和其它路径的相交点就会出错。

你可以打开demo1,然后打开console,运行:

Snap.path.intersection($lineA,$lineL2)

查看斜线和第二条平行线的交点,可以看到在拖动lineA过程中,相交点是不变的。

使用map将变换映射到路径

上面那种变换方法用在普通元素上是没问题的,但是用在路径上就会造成计算问题。其实,Snap.svg也提供了Snap.path.map(pathString,transformString)方法,这个方法可以将变换转成路径的定义,放回新的路径定义字符串。所以,我们可以这么用:

let myElem = Snap('.myElem');
let angle = 45 , matrix = new Snap.Matrix();
matrix.rotate(angle);   //变换矩阵旋转45度
let transformString = Snap.path.map($lineA,m);
$lineA.attr('d',transformString);

看demo2,再运行上面的测试,可以用到相交点是动态变化的。

另外,交点的值和路径的宽度是有关系,可以改变demo中路径的宽度试试。

Snap svg:路径变换和相交计算相关推荐

  1. 使用snap.svg实现svg路径描边动画

    使用snap.svg实现svg路径描边动画 一,snap.svg插件 在近几天,突然接到一个需求,内容是要在网页上写一个路径的动画,还需要可以随意控制动画的速度,开始于结束,本来是一个图片可以解决的问 ...

  2. android svg路径动画,五、Android SVG动画

    SVG的全称是Scalable Vector Graphics(可缩放矢量图形),它不会因为图像放大而失真,且占用内存小,同时搭配Path动画,能够实现一些意想不到的效果. Android中的SVG图 ...

  3. SVG路径描边动画效果的实现

    SVG路径描边动画效果 理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio部分 参考自: http://www.w3cplus.com/html5/svg-coord ...

  4. path弧形参数 svg_如何计算圆弧(圆弧)的SVG路径

    您想使用椭圆Arc命令.不幸的是,这需要你指定起点和终点的笛卡尔坐标(x,y)而不是你拥有的极坐标(半径,角度),所以你必须做一些数学运算.这是一个应该工作的JavaScript函数(虽然我还没有测试 ...

  5. 纯CSS实现帅气的SVG路径描边动画效果

    一.应该人人皆会的基础技术 简而言之,就是让SVG的描边像是有人绘制一样的动画效果. 国外很多相关介绍的文章,来看看一些效果gif吧~ 纯CSS实现帅气的SVG路径描边动画效果 纯CSS实现帅气的SV ...

  6. css图像描边,纯CSS实现帅气的SVG路径描边动画效果

    一.应该人人皆会的基础技术 简而言之,就是让SVG的描边像是有人绘制一样的动画效果. 国外很多相关介绍的文章,来看看一些效果gif吧~ 我至少看到了4篇外文对此技术介绍(参见文末参考文章),觉得挺有意 ...

  7. 使用 Photoshop工具直接导出 svg路径

    最近做某个小项目,项目中用到了很多 icon 图标,我一般都是习惯于直接引用各大图标库,例如 fontawesome.Ionicons.MaterialCommunityIcons等. 由于最近也在关 ...

  8. SVG路径描边动画效果

    一.效果 简而言之,就是让SVG的描边像是有人绘制一样的动画效果. 三.必知的基础知识 SVG中有个比较重要的属性分支,stroke :"描边". 1,stroke 描边颜色 no ...

  9. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第三次迭代 | 中心元变换 | 检验数计算 | 最优解判定 )

    文章目录 一.第三次迭代 : 中心元变换 二.第三次迭代 : 单纯形表 三.第三次迭代 : 检验数计算 四.第三次迭代 : 最优解判定 五.第三次迭代 : 最终单纯形表 上一篇博客 [运筹学]线性规划 ...

最新文章

  1. Ubuntu 16.04安装双显卡驱动方法收集
  2. 嗨,你真的懂this吗?
  3. Leetcode-探索 | 存在重复
  4. LeetCode 1389. 按既定顺序创建目标数组
  5. CDNOW用户消费行为分析报告(python+ppt)
  6. java实时读取文件内容,java实时读取和写入文件
  7. Oracle 无备份情况下的恢复--密码文件/参数文件
  8. matlab的GUI实验——实现简单信号发生器
  9. 你们要得SpringBoot版的停车管理系统(含小程序)已经找到了,改改就能卖钱(附源码)...
  10. 【数字信号调制】基于matlab二进制数字相位调制(2PSK)【含Matlab源码 1000期】
  11. php 加密视频播放地址,如何在PHP中实现Clear-Key视频加密并以HTML格式播放
  12. 两个平面的位置关系和判定方程组解_2018年高考数学总复习第九章平面解析几何第2讲两直线的位置关系学案!...
  13. 服务器安装固态硬盘的步骤,服务器系统安装中不识别固态硬盘问题
  14. 我的web前端工作日志14------2020年度总结
  15. MySQL 数据库备份与还原
  16. swiper 用了effect:'fade', 切换效果 一定要用 参数crossFade 否则多个slide会叠再一起
  17. idrac给服务器重装系统,DELL服务器如何使用iDRAC安装操作系统
  18. 多旋翼飞行器设计与控制·基本组成(笔记002)
  19. ES(四)ES使用(基本查询、聚合查询)
  20. 阿里云、腾讯、华为、滴滴为何都在用 SkyWalking ?

热门文章

  1. 基于Docker的Redis集群简单搭建
  2. 03-Flutter移动电商实战-底部导航栏制作
  3. Android 取消返回键返回事件,返回桌面,再按一次退出程序,双击事件
  4. 学校计算机二级模拟上机能看分数吗,全国计算机二级考试机试考完怎么储存的...
  5. python 遍历对象_python js对象的遍历
  6. 局域网抢答器_基于童芯派的抢答器V1.0
  7. java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园
  8. 性能测试十九:jmeter参数优化+排错
  9. express+vue+mongodb+session 实现注册登录
  10. SVG_text.动态创建换行显示(横)