[golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量
1 前言
svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量
2 代码
type Point struct {
X float64
Y float64
}
func GetOffsetXYAfterRotationForSVG(W, H, L, T, Angle float64) (ret Point) {
AngleRad := Angle * math.Pi / 180
SinX := math.Sin(AngleRad)
CosX := math.Cos(AngleRad)
Z := math.Sqrt(math.Pow(W, 2)+math.Pow(H, 2)) / 2
AngleRadBeta := math.Atan(H / W)
AngleBeta := AngleRadBeta * 180 / math.Pi
fmt.Println("Angle,SinX,CosX,H,W,L,T,ZHalf,AngleBeta=", Angle, SinX, CosX, H, W, L, T, Z, AngleBeta)
translate := Point{L, T}
//开始计算,在以对角线一半为半径画圆,初始化角度为Anglebeta
Angle = Angle + AngleBeta
p0 := Point{Z * math.Cos(AngleRadBeta), Z * math.Sin(AngleRadBeta)}
//ShowPoint(p0)
AngleRad = Angle * math.Pi / 180
SinX = math.Sin(AngleRad)
CosX = math.Cos(AngleRad)
p1 := Point{Z * CosX, Z * SinX}
//ShowPoint(p1)
p1.Minus(p0)
translate.Minus(p1)
//ShowPoint(p1)
fmt.Printf("p0=%+v,p1=%+v,p2=%+v", p0, p1, translate)
fmt.Println()
//保存精度
translate.Decimal(3)
ret = translate
return
}
func DecimalPrec(value float64, prec int) float64 {
value, _ = strconv.ParseFloat(fmt.Sprintf("%."+strconv.Itoa(prec)+"f", value), 64)
return value
}
func (p1 *Point) Add(p0 Point) {
p1.X = p1.X + p0.X
p1.Y = p1.Y + p0.Y
return
}
func (p1 *Point) Minus(p0 Point) {
p1.X = p1.X - p0.X
p1.Y = p1.Y - p0.Y
return
}
func (p1 *Point) Times(scale float64) {
p1.X = p1.X * scale
p1.Y = p1.Y * scale
return
}
func (p1 *Point) Decimal(prec int) {
p1.X = DecimalPrec(p1.X, prec)
p1.Y = DecimalPrec(p1.Y, prec)
return
}
func ShowPoint(p0 Point) {
fmt.Printf("point x=%v,y=%v", p0.X, p0.Y)
fmt.Println()
}
3 输出
----start----
Angle,SinX,CosX,H,W,L,T,ZHalf,AngleBeta= 30 0.49999999999999994 0.8660254037844387 400 400 0 0 282.842712474619 45
p0={X:200.00000000000003 Y:200},p1={X:-126.7949192431123 Y:73.20508075688775},p2={X:126.7949192431123 Y:-73.20508075688775}
x,y= 126.795 , -73.205
----end----
[golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量的更多相关文章
- C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字
这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋 ...
- [golang]图片按中心旋转后,新图的左顶点位置的偏移量
1 前言 图片按中心旋转后,新图的左顶点位置的偏移量 2 代码 func OffsetXYAfterRotationCore(W, H, L, T, Angle float64) (x, y floa ...
- SVG图片如何调整大小和颜色
设计妹子给了SVG图片,在开发的时候尺寸不对,颜色也要修改,应当如何解决? 1.修改大小:在<svg> 标签中修改width.height 属性(默认单位是px)2.修改颜色:在<p ...
- SVG图片背景透明
今天在调整网页的时候,将logo以原有直接贴代码形式,改为加载文件. 其实真正的目的是做SEO.上次SEO交流后得出 结论:核心在于内容的本身的优化.信噪比很重要.也就是有效信息需要占文章的主要内容, ...
- 使用在线编辑 svg 软件修改 svg 图片
网站需要使用图标字体,但设计师给的图标大小有问题,故使用下面说陈述方法简单修改了一下.使用到的在线编辑软件地址为:https://editor.method.ac/ 问题: 注:至于如何使用图标字体( ...
- 动态svg图片简单制作
一.简介 #topics #no-box-shadow-img { box-shadow: none } 博主头像 svg图片格式不同于其它图片格式,svg图片本质上是一个xml文件,它内部是标记语言 ...
- OpenMesh 将默认的 float 类型改为 double 类型
OpenMesh 中默认的数据类型都是 float 类型的,如果要将其默认的 float 类型改为 double 类型,可以这么做: #include <OpenMesh/Core/Mesh/P ...
- Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片
Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...
- Svg图片在asp网站上的使用
最近需要做一个动态的根据后台的返回数据而动态显示的导航图,然后我就采用了jquery+ajax+SVG矢量图来实现这个功能. 首先,客户给了个ai的矢量图,我对这一块不懂就找以前同事帮我转成了svg图 ...
随机推荐
- MySQL索引失效的几种场景
我们都知道建立索引能够提高查询效率,那么是不是任何情况下都能提高呢,当然不是的的,下面我们就来列举一些常见的索引失效的场景. 借用上一篇文章的dm_person_info表 在card_code列没加 ...
- 每天一个命令-cp 命令
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...
- pg数据库中时间查询的方式
方法一:select * from user_info where create_date>= '2015-07-01' and create_date < '2015-08-15'; 方 ...
- mysql实现row_number()和row_number() over(partition by)
row_number() ) r, test_table t 解释:给test_table里的数据设置行号, rn是行号 row_number() over(partition by) ,@rank: ...
- kotlin基础 条件控制 when
When 表达式 when 将它的参数和所有的分支条件顺序比较,直到某个分支满足条件. when 既可以被当做表达式使用也可以被当做语句使用.如果它被当做表达式,符合条件的分支的值就是整个表达式的值, ...
- django使用mysql出现警告Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release
django使用mysql出现警告 Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY ...
- odoo开发笔记 -- 提高访问安全性的一种方式
场景描述: 最近在做项目的过程中,需要需要将odoo应用集成到其他系统中, 在对方的系统中点击我们的应用,打开对应系统,但是界面不做跳转,在当前页面打开,并且浏览器地址栏只显示IP+应用名,不让显示o ...
- aardio调用dll
刚知道aardio这个不错的玩具,可惜作者停更了,贴一个调用dll的例子备用吧 vc代码 extern "C" _declspec(dllexport) int _stdcall ...
- Spring 内部机制 Spring AOP
https://my.oschina.net/zhangxufeng/blog/2219005 Spring Bean注册解析(一)和Spring Bean注册解析(二) 彻底征服 Spring AO ...
- 中国大互联网公司在github上的开源项目
公司名 账号数 账号名 总项目数 非fork项目数 百度 13 baidu.ApolloAuto. brpc. mipengine.Clouda-team.mesalock-linux. ecomfe ...