Skip to content

Canvas 2D の幾何

Canvas 2D のためのパスの組み立てと、角度の計算です。パスを作る関数はどれも パスを組み立てるだけ で、fill()stroke() も呼びません。どう塗るかは呼び出す側が決めます。

使い方

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

度をラジアンに直します。

パラメーター

パラメーター説明既定値
deg度で表した角度number必須

戻り値

引数説明
radラジアンで表した角度number

getArcPointerByDeg

円周上で、その角度にあたる点を求めます。

パラメーター

パラメーター説明既定値
degラジアンで表した角度number必須
r半径number必須

戻り値

引数説明
point[x, y][number, number]

getTangentByPointer

円周上のある点における接線を求めます。

パラメーター

パラメーター説明既定値
xx 座標number必須
yy 座標number必須

戻り値

引数説明
line[傾き, 切片]Array<number>

roundRectByArc

角の丸い長方形を描きます。短いほうの辺の半分より大きい角の半径は 半分に抑えられる ので、隣り合う角が重なることはありません。

パラメーター

パラメーター説明既定値
ctxCanvas の 2D コンテキストCanvasRenderingContext2D必須
...restx, y, w, h, rnumber[]必須

戻り値

戻り値はありません(void

fanShapedByArc

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

パラメーター

パラメーター説明既定値
ctxCanvas の 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)は、そのまま直接扱います。

パラメーター

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

戻り値

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

WARNING

色の停止位置には単位を付けられません(red 0, blue 1 のように書きます)。百分率で書くと(red 50%)解析の結果が NaN になり、addColorStop が例外を投げます。

MIT ライセンスのもとで公開されています。