canvas 旋转一个元素

//配合图片理解
//需要参数
let c_left = 100  // x
let c_top = 100   // y
let d_with = 100  // 元素宽
let d_height = 100  // 元素高
let a = 45      // 元素旋转角度



ctx.save()     // 先保存画布
//一定要以中心点计算 (这里一开始是按照左上位置  旋转不同角度 老是偏移)
let left = c_left  + d_with/2   //中心点位置
let top = c_top  + d_height/2

ctx.rotate(a*Math.PI/180);//旋转画布
		
//这里是计算角度(deg)
var result = Math.atan(top/left) / (Math.PI / 180); //这个是a+deg
result = Math.round(result);
let deg = result - a  //获得deg

//通过横纵坐标获取长度
let leng = Math.sqrt(Math.pow(left,2) + Math.pow(top,2))
// 再通过角度  获取新的横纵坐标
let  x = Math.round(leng * Math.cos(deg*Math.PI/180)) - d_with/2;
let  y = Math.round(leng * Math.sin(deg*Math.PI/180)) - d_height/2;
				
//画图  这里是封装的方法  换成自己的即可
_canvas.drawCircular(ctx, logo.path,x,y,d_with,d_height); 
//还原画布
ctx.restore();

原理 :旋转画布后 产生新的坐标系 通过原先的坐标点和旋转角度 在新的坐标系中 重新获取横纵坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值