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 Canvas の 2D コンテキスト CanvasRenderingContext2D 必須
...rest x, y, w, h, r number[] 必須

戻り値

戻り値はありません(void

fanShapedByArc

扇形をひと切れ描きます。切れ目どうしのあいだの隙間も含みます。

パラメーター

パラメーター 説明 既定値
ctx Canvas の 2D コンテキスト CanvasRenderingContext2D 必須
maxRadius 外側の半径 number 必須
start 始まりの角度(ラジアン) number 必須
end 終わりの角度(ラジアン) number 必須
gutter 切れ目どうしの隙間の幅 number 必須

戻り値

戻り値はありません(void

getLinearGradient

CSS の linear-gradient(...) の文字列を、Canvas の CanvasGradient に翻訳します。

createLinearGradient が受け取るのは始点と終点だけですが、CSS は向きを角度で表します。そこで円を 45 度ずつ 8 つの扇形に分け、正接を使って角度を、長方形の境界上の始点と終点の座標へ戻します。キーワードでの向き(to top / to bottom / to left / to right)は、そのまま直接扱います。

パラメーター

パラメーター 説明 既定値
ctx Canvas の 2D コンテキスト CanvasRenderingContext2D 必須
x 長方形の左上の角の x number 必須
y 長方形の左上の角の y number 必須
w 長方形の幅 number 必須
h 長方形の高さ number 必須
background 例:linear-gradient(90deg, red, blue) string 必須

戻り値

引数 説明
gradient fillStylestrokeStyle にそのまま代入できます CanvasGradient