uniapp实现canvas画倾斜的圆

好家伙为了画这个椭圆我可真的是煞费苦心

首先在uni的canvas里面是没有画椭圆的函数的,想要实现椭圆有很多种方法

  1. 可以使用lineTo不停的改变很小的间距来画 但是十分耗费性能
  2. 使用arc画圆,使用scale进行变形
  3. 可以使用arcTo 贝塞尔曲线等进行椭圆的绘制,主要是要找到控制点,相对麻烦一些

那么我使用的就是第二种方法,主要是因为比较简单,虽然也有一定的弊端 比如进行缩放的时候他的位置会移动 ,再比如画出的曲线线条宽度不一致,但是无伤大雅

下面就是这篇文章的主要内容 椭圆是画出来了,但是我们有倾斜的需求该怎么办呢?就要使用到translate和rotate,具体的都在代码里写了

	// 可以参考下思路 主要还是跟据场景来定
			drawSkimLine(ctx, x,y,radius) {
				ctx.lineWidth = 2;
				ctx.strokeStyle = "red";
				ctx.beginPath();
				ctx.translate(x,y) //将画布的原点定位到 椭圆的圆心
				ctx.rotate(30 * Math.PI / 180); //椭圆倾斜的角度
				ctx.scale(0.3, 1);//因为arc画的是圆 是通过scale变形变成的椭圆
				ctx.arc(0, 0, radius, 0, Math.PI * 2);//画圆 注意这里前两个参数是0,0
				ctx.stroke();
				ctx.draw();


			}

那么这个的重点就是顺序一定一定要按照上面的顺序来,如果先scale 你会发现不管你怎么旋转都是没有用的,如果不先translate去定位原点,旋转和缩放就会脱离轨迹

如果有其他更好的方法欢迎指教,刚开始摸索canvas,嘻嘻,主要是为了记录自己的坑

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值