Canvas 2D 기하
Canvas 2D를 위한 경로 만들기와 각도 계산입니다. 경로를 만드는 함수는 모두 경로를 짜기만 할 뿐, fill()도 stroke()도 부르지 않습니다. 어떻게 칠할지는 부르는 쪽이 정합니다.
사용법
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
도를 라디안으로 바꿉니다.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
deg |
도로 나타낸 각 | number |
필수 |
반환값
| 인자 | 설명 | 타입 |
|---|---|---|
rad |
라디안으로 나타낸 각 | number |
getArcPointerByDeg
원 위에서 그 각에 해당하는 점입니다.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
deg |
라디안으로 나타낸 각 | number |
필수 |
r |
반지름 | number |
필수 |
반환값
| 인자 | 설명 | 타입 |
|---|---|---|
point |
[x, y] |
[number, number] |
getTangentByPointer
원 위 한 점에서의 접선입니다.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
x |
x 좌표 | number |
필수 |
y |
y 좌표 | number |
필수 |
반환값
| 인자 | 설명 | 타입 |
|---|---|---|
line |
[기울기, 절편] |
Array<number> |
roundRectByArc
모서리가 둥근 직사각형을 그립니다. 짧은 변의 절반보다 큰 모서리 반지름은 그 절반으로 죄어지므로, 이웃한 모서리끼리 겹치는 일이 없습니다.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
ctx |
캔버스의 2D 컨텍스트 | CanvasRenderingContext2D |
필수 |
...rest |
x, y, w, h, r |
number[] |
필수 |
반환값
반환값 없음(void)
fanShapedByArc
부채꼴 한 조각을 그립니다. 조각 사이의 틈까지 함께요.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
ctx |
캔버스의 2D 컨텍스트 | CanvasRenderingContext2D |
필수 |
maxRadius |
바깥쪽 반지름 | number |
필수 |
start |
시작 각(라디안) | number |
필수 |
end |
끝 각(라디안) | number |
필수 |
gutter |
조각 사이 틈의 너비 | number |
필수 |
반환값
반환값 없음(void)
getLinearGradient
CSS의 linear-gradient(...) 문자열을 캔버스의 CanvasGradient로 옮깁니다.
createLinearGradient이 받는 것은 시작점과 끝점뿐인데 CSS는 방향을 각으로 적습니다. 그래서 원을 45도씩 여덟 부채꼴로 나누고, 탄젠트로 그 각을 직사각형 테두리 위의 시작·끝 좌표로 되돌립니다. 낱말로 적은 방향(to top, to bottom, to left, to right)은 곧바로 다룹니다.
매개변수
| 매개변수 | 설명 | 타입 | 기본값 |
|---|---|---|---|
ctx |
캔버스의 2D 컨텍스트 | CanvasRenderingContext2D |
필수 |
x |
직사각형 왼쪽 위 모서리의 x | number |
필수 |
y |
직사각형 왼쪽 위 모서리의 y | number |
필수 |
w |
직사각형의 너비 | number |
필수 |
h |
직사각형의 높이 | number |
필수 |
background |
예: linear-gradient(90deg, red, blue) |
string |
필수 |
반환값
| 인자 | 설명 | 타입 |
|---|---|---|
gradient |
fillStyle이나 strokeStyle에 그대로 넣을 수 있습니다 |
CanvasGradient |