Skip to content

Geometria para Canvas 2D

Construtores de traçado e contas de ângulo para o Canvas 2D. Toda função de traçado apenas monta o traçado; ela nunca chama fill() nem stroke(), então quem a usa decide como pintar.

Uso

ts
import { roundRectByArc, getLinearGradient } from 'ranuts/utils';

const ctx = canvas.getContext('2d')!;

roundRectByArc(ctx, 10, 10, 200, 80, 12);
ctx.fillStyle = getLinearGradient(ctx, 10, 10, 200, 80, 'linear-gradient(90deg, #06f, #0cf)');
ctx.fill();

API

getAngle

De graus para radianos.

Parâmetros

ParâmetroDescriçãoTipoPadrão
degÂngulo em grausnumberObrigatório

Retorna

ArgumentoDescriçãoTipo
radÂngulo em radianosnumber

getArcPointerByDeg

O ponto da circunferência que corresponde a um ângulo.

Parâmetros

ParâmetroDescriçãoTipoPadrão
degÂngulo em radianosnumberObrigatório
rRaionumberObrigatório

Retorna

ArgumentoDescriçãoTipo
point[x, y][number, number]

getTangentByPointer

A reta tangente num ponto da circunferência.

Parâmetros

ParâmetroDescriçãoTipoPadrão
xCoordenada xnumberObrigatório
yCoordenada ynumberObrigatório

Retorna

ArgumentoDescriçãoTipo
line[inclinação, intercepto]Array<number>

roundRectByArc

Traça um retângulo de cantos arredondados. Um raio maior que a metade do lado mais curto é cortado nessa metade, de modo que cantos vizinhos nunca se sobrepõem.

Parâmetros

ParâmetroDescriçãoTipoPadrão
ctxContexto 2D do canvasCanvasRenderingContext2DObrigatório
...restx, y, w, h, rnumber[]Obrigatório

Retorna

Sem valor de retorno (void)

fanShapedByArc

Traça uma fatia de pizza, incluindo o vão que a separa das outras.

Parâmetros

ParâmetroDescriçãoTipoPadrão
ctxContexto 2D do canvasCanvasRenderingContext2DObrigatório
maxRadiusRaio externonumberObrigatório
startÂngulo inicial em radianosnumberObrigatório
endÂngulo final em radianosnumberObrigatório
gutterLargura do vão entre as fatiasnumberObrigatório

Retorna

Sem valor de retorno (void)

getLinearGradient

Traduz uma string linear-gradient(...) do CSS para um CanvasGradient do Canvas.

O createLinearGradient só aceita um ponto inicial e um final, enquanto o CSS descreve a direção como um ângulo. Por isso a circunferência é dividida em oito setores de 45° e a tangente devolve o ângulo em forma de coordenadas de início e fim sobre a borda do retângulo. As direções por palavra-chave (to top, to bottom, to left, to right) são tratadas diretamente.

Parâmetros

ParâmetroDescriçãoTipoPadrão
ctxContexto 2D do canvasCanvasRenderingContext2DObrigatório
xx do canto superior esquerdo do retângulonumberObrigatório
yy do canto superior esquerdo do retângulonumberObrigatório
wLargura do retângulonumberObrigatório
hAltura do retângulonumberObrigatório
backgroundpor exemplo linear-gradient(90deg, red, blue)stringObrigatório

Retorna

ArgumentoDescriçãoTipo
gradientPode ser atribuído direto a fillStyle ou strokeStyleCanvasGradient

WARNING

As paradas de cor precisam vir sem unidade (red 0, blue 1). Uma parada em porcentagem (red 50%) é analisada como NaN e o addColorStop vai lançar.

Publicado sob a licença MIT.