理解SVG transform坐标变换

来来来一起用C#解析渲染显示SVG矢量图转化格式保存 C#解析渲染显示SVG矢量图并转化格式保存,代码生成SVG,将svg显示在winform上,SVG显示在控件上,SVG结合GDI+绘图https://blog.youkuaiyun.com/haigear/article/details/128893506 阅读详情
转自: http://www.zhangxinxu.com/wordpress/?p=4965

一、HTML transform和SVG transform

SVG中自带transform属性,没错,是属性,例如:

<svg width="200" height="150">
    <rect x="30" y="30" width="120" height="90" transform="rotate(45)"></rect>
</svg>

普通的HTML元素没有transform属性,但是支持CSS3的transform, 好奇的小伙伴可能会疑问了,CSS3中的transform变换,跟SVG中的transform是什么关系呢?

恩,有点类似于谢霆锋和陈冠希之间的关系,有些小复杂。

谢霆锋和陈冠希

OK, 先说说相似之处吧。
一些基本的变换类型是一样的,包括:位移translate, 旋转rotate, 缩放scale, 斜切skew以及直接矩阵matrix. 但只局限于2D层面的变换。SVG似乎只支持二维变换(若有不对,欢迎指正),且类似translateX, rotateX也都是不支持的。

下面就是不一样的地方了:
1. CSS3 transform一般用在普通元素上,虽然也可以应用在SVG元素上,但是IE浏览器(IE edge未测试)却不支持SVG元素;

rect {
    /* IE说:你这是弄啥来? */
    transform:rotate(45deg);
}

2. HTML元素的CSS3 transform和SVG的transform坐标系统大相径庭;

平常我们使用transform其坐标是相对于当前元素而言的,默认是元素的中心点变换,我们可以通过transform-origin属性改变变换的中心点。而SVG中的transform的坐标变换的是相对于画布的左上角计算的,跟HTML的transform差别较大,理解上也更加麻烦。而本文就是彻底理清SVG中的transform到底是怎么工作的。

3. 具体的语法细节有差异。SVG transform属性语法有些自带偏移。而CSS transform则更加纯粹些。

//zxx: 据说CSS的transform和SVG的transform属性即将合并。

二、SVG transform translate位移

我们先来看下最简单最基本的translate位移变换,例如,我们偏移(295,115)大小的位置,HTML元素的偏移(下图左)和SVG元素的偏移(下图右)就会不一样。一个是相对自己的中心点(下图左),一个是SVG的左上角(下图右)。

translate偏移

虽然两者的相对位置不一样,但是,对于单纯地位移来讲,无论你相对于那个点位置,实际偏移的位置都是一样的,因此,从表现上讲,两者最终的位置看上去还是一样的。

您可以狠狠地点击这里:HTML translate和SVG translate比对demo

最终表现一致

前面我们提到过,SVG元素也能使用CSS3的transform进行变换(非IE浏览器),但是只能支持2D层面的几个属性,例如translateX(tx), translateY(ty)以及translate(tx[, ty]). translateZ(tz)则并不支持。

如果我们使用SVG元素自带的transform属性进行变换,则仅支持translate(tx[ ty])这种用法(缺省使用0代替),当多个参数值的时候,可以使用逗号,或者直接空格分隔,但是不能包含单位,例如下面这种写法直接翘辫子:

transform="translate(30px 12px)"    

下面这种无单位写法才可以:

transform="translate(30 12)"        
transform="translate(30, 12)"       

另外,和CSS3的transform一样,SVG中的translate位移也是支持多声明累加的。例如:

transform="translate(30 12) translate(30 12)"

等同于:

transform="translate(60 24)"

需要注意的是,俩个translate中间不要混有其他的transform变换。否则,最终的位移就不是简单的相加了。

三、SVG transform rotate旋转

上面的位移变换,我们似乎没看到明显的不一样。但是,从这里的旋转变换开始,就可以看出明显的差异了。

下面图示的是基本的45度旋转(来自css-tricks)(左HTML元素,右SVG元素):
旋转及其中心点示意

由于SVG元素的默认是SVG左上角为中心变换的,因此,矩形旋转的幅度就有了过山车的感觉。

您可以狠狠地点击这里:HTML rotate和SVG rotate比对demo

结果会发现,两者位置大相径庭了:
HTML旋转和CSS旋转差异

CSS transform中的rotate语法比较直白:rotate(angle),就一个angle参数,表示角度大小,不过必须要有单位,比如deg(度), turn(圈), grad(百分度 – 一种角的测量单位,定义为一个圆周角的1/400。常用于建筑或土木工程的角度测量),甚至可以使用calc()计算,例如:calc(.25turn - 30deg).

但是,SVG中的属性transform旋转就没有这么多花头,单位?哦,别逗了,毛线都没有,直接光秃秃的数值,表示角度deg,例如:

transform="rotate(45)"

具体语法为:rotate(angle[ x y]). 大家注意到没有,这里有个[ x y], []表示这个可选参数。也就是说,SVG中的rotate旋转比CSS的rotate多了一个可选参数,那这个可选参数[ x y]表示什么意思呢?

告诉你,是非常有用的东西。用来偏移transform变换中心点的。

为什么说非常有用呢?SVG元素默认是基于左上角的,但是我们的旋转元素往往都在SVG的中间区域,此时旋转跨度太大,智商余额不足的我们就脑补不过来,此时难免希望可以像CSS的transform变换一样,围绕元素的中心点变换。怎么办?

我们可以借助CSS3 transform-origin修改SVG元素默认的变换中心点,然后配合CSS变换。但是,我们前面多次提到,IE浏览器的SVG元素不识别CSS中的transform. 所以,从兼容性上讲,CSS策略是不可行的。难道就没有其他办法了,有,就是这里的可选参数[ x y],通过对变换中心点的偏移修正,我们也能让SVG元素围绕自身的中心点旋转了。

所以,上面的demo,我们稍微修改下,就能让矩形围绕自己旋转了,见下:

<rect x="30" y="30" width="120" height="90" rx="10" ry="10" fill="#a0b3d6" transform="rotate(45, 90 75)"></rect>
<!-- 90 = 30 + 120/2 -->
<!-- 75 = 30 +  90/2 -->

您可以狠狠地点击这里:SVG元素也围绕自身中心点旋转demo

中心点旋转

使用原理图表示就是下面这样(左HTML旋转,右SVG元素偏移旋转):
围绕中心点旋转

同样的,rotate旋转可以多个值并存,例如下面的CSS和attribute用法:

transform: rotate(45deg) rotate(-45deg);
transform="rotate(45) rotate(-45)"

然而,需要注意的是,SVG属性的transform声明的中心变换坐标是不能共享的。

因此,虽然transform="rotate(45, 90 75)"是中心点旋转,但是,后面再添加其他东西,例如:rotate(-45)则偏移值忽略,终中心点还是SVG的左上角(0,0)位置,好惨!

例如原来的45度旋转,再加个-45度反向旋转:

 <rect x="30" y="30" width="120" height="90" rx="10" ry="10" fill="#a0b3d6" transform="rotate(45, 90 75) rotate(-45)"></rect>

结果位置回去了?才怪呢!

-45度再旋转

CSS的是又回去了,但是SVG的确是挂在月球上了。究其原因是rotate(-45)又是相对SVG左上角变换的啦!

SVG再变换原理示意

您可以狠狠地点击这里:SVG连续旋转demo

虽然乍看上去,好像SVG的坐标系统有些怪怪的,但是,实际上,在有些需求场景下,SVG这种看似独立的偏移系统更容易实现一些功能。

比方说,我们希望某个SVG元素先以右下角为中心旋转90度,然后再以右上角为中心旋转90度,该怎么处理?

对于SVG transform,我们直接面向需求写数值就可以了。假设我们的SVG元素的高宽是120*90, 左上角坐标是(30,30), 则,显然,右下角坐标是(150,120), 右上角坐标是(150,30),于是,我们的transform值就很简单:

transform="rotate(90, 150 120) rotate(90 150 30)"

参见下面的示意图(示意图的坐标与上面略有出入,但不影响原理示意):
SVG transform连续旋转与坐标偏移

但是,如果我们使用之前容易理解的CSS3来实现,反而就复杂了,因为CSS3中的transform的变换点只能一次性指定,如果要实现不同变换点的旋转效果,只能通过translate再次偏移,例如,实现上面的右下角再右上角90度旋转,则要这样:

transform-origin: right bottom; /* 或者 100% 100% */
transform:
  rotate(90deg)
  translate(0, -100%) /* 从右下到右上 */
  rotate(90deg)
  translate(0, 100%);

Gif示意下就是:
gif示意CSS3的旋转偏移实现

显然要麻烦很多。可见,两种坐标系统没有绝对的优劣。

您可以狠狠地点击这里:右下再右上旋转90度demo

旋转偏移示意截图

上图为两种变换的最终效果,虽然最终的效果是一样的,但是,从理解上而言,这回,是SVG的transform反而更容易理解。还是那句话,辩证看问题,凡事无绝对。

四、SVG transform scale缩放

SVG中的缩放的语法就比较单纯了,就scale(sx[, sy]), sx表示横坐标缩放比例,sy表示纵坐标缩放比例。其中sy是可缺省的,如果缺失,表示使用和sx一样的值,也就是等比例缩放。其中,sx和sy两个参数可以逗号分隔,也可以使用空格分隔。这和CSS3中的使用有所不同,两外,SVG transform属性值缩放是不支持scaleX, scaleY这些鬼的。

同样的,CSS控制的transform和SVG元素属性控制的transform的坐标系统是不一样的。一个默认元素中心(下图左),一个是SVG画布左上角(下图右),于是(from css-tricks):
缩放坐标示意

因此,当我们对SVG元素scale缩放时候,发现位置也有出乎我们意料,就应该知道是怎么回事了。

rotate旋转虽然也是迥异坐标,但是其参数自带偏移参数,我们我们移个花接个木,还是可以得到我们想要的结果。但是,scale缩放这里,就要悲惨很多了,没有自带偏移参数,于是,当我们要实现SVG元素居中缩放的效果,还需要使用translate手动偏移。

怎么个手动偏移法呢?即使先translate其中心点位置到元素的中心坐标位置,然后缩放,然后坐标再反方向还原回去。例如,某元素中心点坐标是(95, 75), 垂直缩放1.5倍的效果则是:

transform="translate(95 75) scale(1, 1.5) translate(-95 -75)"

您可以狠狠地点击这里:CSS transform和SVG transform scale缩放demo

对应的CSS代码就简单多了,直接:

.scale {
    transform: scale(1, 1.5);
}

然后最终效果都是一样的:
中心点缩放使用对比示意

使用Gif原理示意如下:
SVG 缩放居中偏移原理

五、SVG transform skew斜切

先来了解下CSS中的斜切,斜切,如果单纯切一个方向,我们可以看成把矩形变成了平行四边形,其总面积不变化。

以纯X轴变换举例,skewX(-45deg)则下面这样子(灰色方块为原始位置):
x轴-45deg斜切变换

skewX(45deg)则下面这样子:
45deg skew斜切效果示意

对于SVG的skew斜切变换,表现效果原理是一样的。但是,使用的语法却相当有意思。

在前面的一些变换中,例如位移、缩放之类是不支持translateX, scaleX这种CSS常见用法的,但是这里的skew却有点让人哭笑不得:不支持skew(x[, y])这种语法,而只能是skewX或者skewY.

别问我为什么?我只是大自然的搬运工,我不生产语法。

因此,没有:

transform="skew(45, 0)"

只有:

transform="skewX(45)"

同样的,由于变换中心点的差异,CSS实现的变换和SVG属性变换往往最后的位置是不一样的:
CSS斜切和SVG斜切的差异示意

不仅如此,如果元素的中心点不是就是SVG的左上角,则skewX(α1) skewX(α2)的最终位置和skewX(α1 + α2)是不一样的(位移和旋转不会这样子)。

您可以狠狠地点击这里:CSS SVG transform skew斜切差异及连续斜切差异demo

正如demo所示,CSS的和SVG的位置差异很大:
不同变换的位置差异

SVG的连续变换和一次性变换的位置也是不一样的:
连续变换和一次性变换的差异

可能有人要疑问,为何连续斜切变换和一次性变换位置会不一样?其实原因很简单,因为斜切的角度和元素偏移大小并不是线性的,比方说,从70到80度和80度到90度之间的位移大小(虽然都是10度的变化区间)是显然不是一个档次的。因此,分开多次连续斜切最终的坐标偏移要比一次性偏移来得小。

最后,和缩放一样,你想要让SVG元素中心点斜切,可以先translate偏移,在skew变换。就不重复举例演示了。

六、其他居中变换处理

像缩放、斜切这些SVG变换,想要如CSS transform-origin:50% 50%一样的中心点变换效果,需要事先位移,我们有没有其他办法呢?

这里有两个思路可供大家参考下。

1. 原始中心位置乃SVG左上角
拿45度旋转举例,我们可以把元素默认就放在中心点和SVG左上角重合的位置上,参见下面的gif演示:
改变原始位置变换演示

于是,我们原来的3步曲就变成了2步曲:

translate(140 105) rotate(45) translate(-140 -105) → translate(140 105) rotate(45)

2. 通过viewBox调整
viewBox可以用来改变SVG画布的视区,这个我之前专门撰文介绍过,是SVG学习必备被深入理解的基础知识,参见:“理解SVG的viewport,viewBox,preserveAspectRatio”一文。

我们可以把元素默认挂在左上角,然后,通过viewBox做手脚,让元素呈现的位置并不是真正的左上角,例如应用viewBox='-140 -105 280 210',则变化如下示意图:
viewbox使用示意

此时,我们只需要让元素旋转就可以了,无需额外的做translate位移,见下gif:
viewBox下的单纯旋转示意

七、结束语

本文介绍的内容实际上都还是非常基本的。实际SVG应用的时候,可能是多个变换参杂在一起,所以,如果本文介绍的几个基本变换都没搞清楚,到时候,想必是想破脑袋都不明白怎么元素跑这里了,怎么变成这样了!

本文的这些知识点虽然基本,但是相当重要的。再加上,不同的变换方法的语法细节还不一样。有的自带偏移,有的需要手动偏移等等;不同变换的前后位置不同,甚至同一变换分开连续变换和一次性变换的结果都不一样等等;都要求大家要细心耐心阅读。

本文内容和结构参考自:Transforms on SVG Elements. 但要比原文要精炼很多,同时,每一个变换都有亲自实践认证,因此,从品质上讲,可能还要略高一筹。

对了,矩阵matrix没有细说过,这个可以参考我之前的文章:“理解CSS3 transform中的Matrix(矩阵)”,一脉相承的。

我也是初学者,出错在所难免,欢迎指正!


svg规范关于transform属性的说明 在将svg图形格式转化为其它格式图形的工作中,坐标变换是首当其冲的一件工作,下面我们结合svg规范看看svg是如何处理坐标变换的,理解了这些,再将其转化成你想要的图形格式的变换方式也就不困难了。1.svg采用的初始坐标系统是视图坐标系,即屏幕左上角为左边原点,y轴正方向朝下,x轴正方向朝右2.The value of the transform attribute is a , which i 阅读详情

相关推荐

SVG入门-基本变换

前言 SVG元素的形变都会用到一个元素属性transform,跟CSS的transform的形变差不多。 HTML transform和SVG transform SVG自带transform属性,例如: <svg width="200" height="150"> <rect x="30" y="30" width="120" height="90" transform="rotate(45)"></rect> </svg> 功能基本上和CSS

natsu-cc的博客 629

css之svg 制作圆及旋转

svg画一个圆,组件封装

Raywh的博客 2412

SVG坐标变换与重用内容的奥秘

本文深入探讨了SVG中的坐标变换和内容重用技巧。通过<image>、<symbol>和<use>元素,介绍了如何优化SVG文件的大小和可维护性。同时,探讨了SVG transform属性和CSS变换,强调了它们在图像处理和动画中的重要性。

weixin_33363025的博客 478

理解SVG坐标系统和变换: transform属性

SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换。然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别。在这篇文章中我们讨论SVG的transform属性和CSS属性,包括如何使用,以及你必须知道的关于SVG坐标系变换的知识。 这是我写的SVG坐标系统和变换部分的第二篇。在第一篇中,包括了任何要理解SVG坐标系统基础的需要知道的内容;更具体...

weixin_33973600的博客 925

HTML+JS实现SVG图片缩放与拖动交互的可运行精品实例

简介:该实例展示了如何使用HTML和JavaScript实现SVG图像的流畅缩放与拖动功能,适用于数据可视化、地图应用和复杂图形展示等场景。通过监听鼠标事件(如mousedown、mousemove、wheel),结合SVG的transform属性操作,实现了无极缩放和自由拖拽的交互效果。代码结构清晰、运行稳定,具备良好的用户体验,是学习SVG动态控制的优质实践案例。

weixin_30205153的博客 1130

解析svg格式并显示MFC视图

解析svg文件并使用gdi绘制出来,mfc程序

SVG 学习笔记之 transform 属性

变换函数指定围绕给定点 (x, y) 旋转 a 度。如果未提供可选参数 x 和 y,则旋转围绕当前用户坐标系的原点进行。transform 属性定义了一个转换定义列表,这些转换定义应用于一个元素和该元素的子元素。转换函数通过 x 和 y 指定缩放操作。如果未提供 y,则假定它等于 x。变换函数将对象移动 x 和 y。如果未提供 y,则假定其为 0。变换函数指定沿 x 轴进行 a 度的倾斜变换。变换函数指定沿 Y 轴进行 a 度的倾斜变换。变换函数以六个值的变换矩阵的形式指定变换。

985小菜鸡 1799

SVG_plot:使用C ++库以SVG格式绘制数据-开源

SVG_plot C ++库允许使用几行C ++代码来添加数据绘图,并保存在矢量和地图等STL容器中,并输出为SVG文件,所有现代浏览器都可以查看这些文件。 可以生产1D,2D和Boxplots,并且有无数的选项来控制外观。 这些图的质量很高,可以进行扩展而不会损失质量(无像素!!),但是它们很小(例如,与Microsoft Excel图相比)并且易于压缩,因此适合实时传输和更新。 SVG_plot项目最初由Jake Voytko于2007年编写,是2007年Boost赞助的Google Summer of Code项目。此后一直在Boost Sandbox中进行维护和增强,但被认为不适合Boost库。这里广泛可用。 第2版​​将不确定性估算值的表示形式表示为数字和区域。

python处理svg 平移 旋转_理解SVG transform坐标变换(转)

一、HTML transform和SVG transformSVG中自带transform属性,没错,是属性,例如:普通的HTML元素没有transform属性,但是支持CSS3的transform, 好奇的小伙伴可能会疑问了,CSS3中的transform变换,跟SVG中的transform是什么关系呢?恩,有点类似于谢霆锋和陈冠希之间的关系,有些小复杂。OK, 先说说相似之处吧。一些基本的变换...

weixin_40004051的博客 1094

AD服务器搭建

一、角色安装1)打开服务器管理器,添加 角色和功能;2) 点 下一步;3)点 下一步;4)点 下一步;5)点击安装;6-1)将此服务器提升为域控制器;6-2)点下一步;6)输入密码 点 下一步;7)自动生成LIXF,点击下一步;8)确认目录,点下一步;8)确认安装条件,点安装; 8)安装成功,点关闭;...

潇峰的博客 6452

GPU运维基础知识

常见的GPU型号如NVIDIA Tesla系列(V100、A100)、GeForce RTX系列(3090、4090)和AMD Instinct系列(MI250X)。硬件监控工具包括NVIDIA的nvidia-smi和AMD的rocm-smi,用于实时监控GPU状态、温度、功耗和显存使用情况。NVIDIA和AMD是主流GPU供应商,NVIDIA的CUDA架构和AMD的ROCm生态是核心。GPU包含流处理器、显存、显存带宽等关键组件,不同型号的GPU在计算能力、显存容量和功耗上存在差异。

云原生运维的博客 762

04——svg中的图形分组<g>

一、在svg中,使用 <g> 标签来创建分组 <g> 标签内部的图形,会继承其属性 <g> 可以使用 transform 属性进行坐标变换,变换之后可以理解为新的自身坐标系 <g> 标签可以嵌套使用 二、<g> 分组坐标变换的实例 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500"> <g stroke="green"

weixin_42289080的博客 3216

R语言WGCNA实战:从基因表达矩阵到模块可视化全流程(附避坑指南)

本文详细介绍了使用R语言进行WGCNA(加权基因共表达网络分析)的完整实战流程,涵盖从基因表达矩阵预处理、软阈值选择、网络构建与模块识别,到模块与表型关联分析及结果可视化的关键步骤。文章重点解析了代码实现,并提供了针对数据质量检查、参数调整等常见问题的避坑指南,帮助生物信息学研究者高效挖掘基因共表达模块的生物学意义。

weixin_29062823的博客 580

svg transform 坐标变换方式

转自:http://xofun.iteye.com/blog/1689597 svg transform 坐标变换方式  坐标变换的使用方式:  代码:      ...  1、平移变换(translate)  平移表达式transform="translate(x,y)",即新坐标系的原点在原坐标系的(x,y)处。坐标轴的方向不变。  2、旋转变换(rotate)  tr

wujingwen1111的专栏 2864

西南科技大学模拟电子技术实验二(二极管特性测试及其应用电路)预习报告

3、用二极管正向虚拟IV仪测出数据,并记录数据于虚表3和虚表4。1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,表6 二极管三种模型参数测试表(电源电压=1.2V)2、用万用表测出数据,并记录数据于虚表1和虚表2。2、用万用表测出数据,并记录数据于虚表5和虚表6。表5 二极管三种模型参数测试表(电源电压=12V)二极管三种模型参数测试表(电源电压=12V)

Welcome To My6n Blog 4082

ZYNQ 网络通信的四种实现方案

一,ZYNQ MIO以RGMII 接口连接外部PHY芯片实现LWIP网络通信。 二,ZYNQ PS 的 ENET0/ENET1 通过 EMIO 的方式扩展至 PL,在 PL 中通过 RGMII 接口连接扩展子卡实现 LWIP 网络通信。 在PL中搭建了1个AXI 1G/2.5G Ethernet Subsystem以及1个AXI Direct Memory Access IP 核。这两个 IP核均通过AXI 总线经S_AXI_HP0 口与PS 连接,PS 通过AXI 总线对其进行配置和控..

wangjie36的博客 1万+

svg-pan-zoom核心原理揭秘:Shadow Viewport与坐标变换机制

如果你正在寻找一个强大的SVG交互库,那么svg-pan-zoom绝对是你的不二选择!这个JavaScript库专门用于在HTML文档中实现SVG图像的平移和缩放功能,支持鼠标事件和自定义JavaScript钩子。今天,我将为你深入解析svg-pan-zoom的核心原理——Shadow Viewport与坐标变换机制,让你彻底理解这个强大工具的工作方式。🎯 ## 什么是svg-pan-zoom

gitblog_00831的博客 396

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3911

svg2pdf.js源码解析:深入理解JavaScript SVG转PDF的完整实现原理

想要在浏览器中轻松将SVG矢量图形转换为PDF文档吗?svg2pdf.js正是这样一个强大的纯JavaScript库,它让SVG到PDF的转换变得简单高效。作为一款专业的SVG转PDF工具,svg2pdf.js能够完全在浏览器端运行,无需服务器支持,为前端开发者提供了极大的便利。 本文将深入解析svg2pdf.js的核心源码,帮助你理解这个JavaScript SVG解析与PDF生成工具的工作原

gitblog_00018的博客 365

UNet改进(12):融合小波变换与注意力机制的图像分割新方法

本文提出了一种改进的WaveletAttentionUNet架构,通过结合小波变换和注意力机制来增强传统UNet的多尺度特征提取能力。该网络使用分组卷积模拟小波分解,将输入通道扩展为4个子带(LL、LH、HL、HH),并通过通道注意力机制自适应加权各子带特征。网络保留了UNet的编码器-解码器结构,在关键位置集成了WaveletAttention模块。实验证明该方法在医学图像分割等任务中能更好地保持边缘细节和复杂纹理特征,同时保持计算效率。

2501_91516851的博客 759

Cadence virtuos安装教程

本文详细介绍了在Ubuntu 18.04系统上安装Cadence Virtuoso IC617及MMSIM的完整流程。主要内容包括:1)系统环境准备(安装JDK及相关依赖包);2)通过创建软链接和修改系统文件实现RedHat环境兼容;3)共享目录文件操作与分卷压缩包合并解压技巧;4)使用InstallScape工具的安装步骤详解,包括权限处理和配置选项。特别提醒需注意系统兼容性处理(如创建redhat-release文件)和分卷压缩包的特殊解压方法(cat合并)。整个安装过程涉及大量Linux命令操作,需特

wangjie36的博客 298

SVG坐标系统与变换技巧:SVG Pocket Guide进阶教程

SVG(可缩放矢量图形)是网页设计和图形开发的强大工具,而掌握其坐标系统与变换技术是创建专业级图形的关键。本教程将通过SVG Pocket Guide中的实用案例,带你快速掌握SVG坐标系统的核心概念和变换技巧,让你的图形设计更加精准和生动。 ## 一、理解SVG坐标系统的基础 SVG使用的是一种独特的坐标系统,与我们常见的数学坐标系有所不同。在SVG中,坐标原点(0,0)位于左上角,x轴向右

gitblog_00954的博客 958

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

6.SVG坐标系转换

Chapter 6. Transforming The Coordinate System 到目前为止,所有图形都准确地绘制在它们属性所定义的地方。有时候,你想将一个图形进行旋转,缩放或移动到一个新的位置。为了完成这些任务,你将 transform 属性添加到到适当的 SVG 元素中。本章研究这些转换的细节。 The translate Transformation 平移转换 在第 5 章中,你见识了你可以使用 <use> 元素的 x 和 y 属性将一组图形对象(a group of grap

五石之瓠 以为大樽 浮于江湖 悠笑人生 2512

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Langchain-Chatchat前端拆解:Next.js驱动的知识库问答界面是怎么搭的

把一份PDF丢进去,三秒后AI带着出处把答案还给你——Langchain-Chatchat这套知识库问答界面背后,前端做的功夫比看上去多。 ## 知识库问答界面长什么样:三大交互区 [![Langchain-Chatchat知识库问答界面整体布局:左侧配置区与主对话区](https://raw.gitcode.com/GitHub_Trending/la/Langchain-Chatchat/

gitblog_00039的博客 375

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

理解CSS3 transform中的Matrix(矩阵)

一、哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”)。这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵)”的时候,难免会心生畏惧(即使你已经学过),正常心理。实际上,这玩意确实有点复杂。 然而,这却是屌丝逆袭的一个好机会。 CSS同行间: 你是不是有这样的感觉:哎呀呀,每天就是对着设计图切页面,...

yannizhang的专栏 2万+
上一篇: 理解CSS3 transform中的Matrix(矩阵)
下一篇: SVG图标颜色文字般继承与填充
auragreen
博客等级 码龄19年 40粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值