uniapp implementa canvas para desenhar círculos inclinados

Rapaz, eu realmente trabalhei duro para desenhar esse oval.

Em primeiro lugar, não existe uma função para desenhar elipses na tela da universidade. Existem muitas maneiras de realizar elipses.

  1. Você pode usar lineTo para alterar continuamente o pequeno espaçamento para desenhar, mas isso consome muito desempenho.
  2. Use arco para desenhar um círculo e escala para deformá-lo.
  3. Você pode usar arcTo, curva de Bezier, etc. para desenhar elipses. O principal é encontrar os pontos de controle, o que é relativamente problemático.

Então eu uso o segundo método, principalmente porque é relativamente simples, embora também tenha certas desvantagens, como sua posição se moverá ao aplicar zoom e a largura das linhas curvas desenhadas é inconsistente, mas é inofensivo.

O seguinte é o conteúdo principal deste artigo: A elipse está desenhada, mas o que devemos fazer se precisarmos incliná-la? Você precisa usar traduzir e girar. Os detalhes estão escritos no código.

	// 可以参考下思路 主要还是跟据场景来定
			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();


			}

O ponto principal aqui é que a ordem deve estar na ordem acima. Se você escalar primeiro, descobrirá que não importa como você gira, é inútil. Se você não transladar primeiro para localizar a origem, a rotação e a escala estará fora do caminho.

Se houver outros métodos melhores, por favor me dê alguns conselhos. Acabei de começar a explorar o canvas, hehe, principalmente para registrar minhas armadilhas.

Acho que você gosta

Origin blog.csdn.net/wuguidian1114/article/details/122441647
Recomendado
Clasificación