パスを極める - 自由自在な線と形 <path>
前のページでは基本的な図形要素を学びましたが、それだけでは表現できない複雑な線や、有機的な形を描きたい時がありますよね。そんな時に登場するのが、SVGで最も強力かつ柔軟な図形要素、<path>
(パス)です!
<path>
要素は、まるでペンを持って紙に絵を描くように、連続した線や曲線、円弧などを組み合わせて、どんな形でも作り出すことができます。その秘密は、d
という属性にあります。
<path>
要素と d
属性
パスは、<path>
タグを使い、その形状を d
(dataの略) 属性に一連のコマンドと座標値で記述します。
<svg width="200" height="200" viewBox="0 0 100 100">
<path d="M10 10 L90 10 L50 90 Z" fill="orange" stroke="black" />
<!-- この d="..." の部分がパスの形状を定義します -->
</svg>
上の例では、M10 10
で (10,10) の点にペンを移動し、L90 10
で (90,10) へ直線を、L50 90
で (50,90) へ直線を、そして Z
でパスを閉じて三角形を描いています。
パスコマンドには、大文字と小文字の2種類があります。
- 大文字コマンド (例:
M
,L
,C
): 絶対座標を指定します。つまり、SVGキャンバスの原点 (通常は左上) からの座標です。 - 小文字コマンド (例:
m
,l
,c
): 相対座標を指定します。つまり、直前の点の位置からの相対的な移動量や距離です。
それでは、主要なパスコマンドを一つずつ見ていきましょう!
移動と直線コマンド
まずは基本の移動と直線です。
M x y
(moveto): ペンを指定した(x,y)
座標へ持ち上げて移動します(線は描かれません)。パスは通常このコマンドから始まります。小文字m dx dy
は現在の位置から(dx,dy)
だけ移動します。L x y
(lineto): 現在位置から指定した(x,y)
座標へ直線を引きます。小文字l dx dy
は現在の位置から(dx,dy)
だけ先の点へ直線を引きます。H x
(horizontal lineto): 現在位置から水平線(Y座標は同じまま)をX座標x
まで引きます。小文字h dx
は現在のX座標からdx
だけ水平線を引きます。V y
(vertical lineto): 現在位置から垂直線(X座標は同じまま)をY座標y
まで引きます。小文字v dy
は現在のY座標からdy
だけ垂直線を引きます。Z
またはz
(closepath): 現在位置からパスの始点(一番最初のM
またはm
コマンドで指定した点)へ直線を引いて、パスを閉じます。大文字小文字の区別はありません。
直線コマンド デモ (M, L, H, V, Z
)
下のコントロールで各点の座標やコマンドを変更して、パスがどう変わるか試してみましょう。
生成される d
属性: M 10 10 L 90 50 H 150 V 150
3次ベジェ曲線コマンド
滑らかな曲線を描くための代表的なコマンドがベジェ曲線です。3次ベジェ曲線は、始点、終点、そして2つの制御点で定義されます。制御点は、曲線の曲がり具合をコントロールします。下のデモでは、黒い点が始点と終点、灰色の点が制御点です。これらの点をドラッグできます。
C x1 y1, x2 y2, x y
(curveto): 現在位置から点(x,y)
へ3次ベジェ曲線を引きます。(x1,y1)
は始点側の制御点、(x2,y2)
は終点側の制御点です。小文字c dx1 dy1, dx2 dy2, dx dy
は相対座標。S x2 y2, x y
(shorthand/smooth curveto): 前のC
またはS
コマンドの制御点を自動的に計算し、滑らかに繋がる3次ベジェ曲線を引きます。(x2,y2)
は新しい終点側の制御点、(x,y)
は新しい終点です。もし前のコマンドがC
やS
でなければ、始点側の制御点は現在の点と同じとみなされます。小文字s dx2 dy2, dx dy
は相対座標。
3次ベジェ曲線 (C
) デモ (ドラッグ可能)
生成される d
属性:
灰色の丸は制御点、黒い丸は始点と終点、点線は制御ハンドルです。制御点をドラッグするかスライダーを操作して、曲線がどう変わるか見てみましょう。
2次ベジェ曲線コマンド
2次ベジェ曲線は、始点、終点、そして1つの制御点で定義されます。3次ベジェ曲線よりシンプルですが、表現力は少し劣ります。下のデモでは、黒い点が始点と終点、灰色の点が制御点です。これらの点をドラッグできます。
Q x1 y1, x y
(quadratic Bézier curveto): 現在位置から点(x,y)
へ2次ベジェ曲線を引きます。(x1,y1)
が制御点です。小文字q dx1 dy1, dx dy
は相対座標。T x y
(shorthand/smooth quadratic Bézier curveto): 前のQ
またはT
コマンドの制御点を自動的に計算し、滑らかに繋がる2次ベジェ曲線を引きます。(x,y)
は新しい終点です。もし前のコマンドがQ
やT
でなければ、制御点は現在の点と同じとみなされます。小文字t dx dy
は相対座標。
2次ベジェ曲線 (Q
) デモ (ドラッグ可能)
生成される d
属性:
円弧コマンド
A
コマンドは楕円の弧を描きます。これは最も複雑なコマンドで、多くのパラメータを持ちます。
A rx ry x-axis-rotation large-arc-flag sweep-flag x y
(elliptical arc)rx, ry
: 楕円のX半径とY半径。x-axis-rotation
: 楕円のX軸の回転角度(度単位)。large-arc-flag
:0
(小さい方の弧) か1
(大きい方の弧) を指定。sweep-flag
:0
(反時計回りの弧) か1
(時計回りの弧) を指定。x, y
: 弧の終点。
a
は相対座標。
始点と終点が同じでも、large-arc-flag
と sweep-flag
の組み合わせで4種類の異なる弧が描けます(rx
, ry
が十分大きい場合)。
円弧 (A
) デモ
始点 M(50,100) から下のコントロールで指定する終点への弧を描きます。
生成される d
属性:
d
属性の書き方のコツ
- コマンドと数値の間は、カンマ(
,
)やスペース( )で区切ります。カンマは多くの場合省略可能で、スペースだけでも解釈されます。M10,20L30,40
もM 10 20 L 30 40
も同じです。 - 数値が連続する場合もスペースで区切ります。例えば、
L 10 20 30 40
はL 10 20 L 30 40
と同じ意味になります。 - 小数点やマイナス符号も使えます。
L 10.5 -20.75
- 可読性を上げるために、コマンドごとに改行を入れることもできます(文字列データとしては連続しています)。
Did you know? Bézier curves, fundamental to vector graphics, were independently developed by two French engineers in the early 1960s: Pierre Bézier at Renault and Paul de Casteljau at Citroën. They were both working on methods for computer-aided design of car bodies. Bézier's work was published first, which is why the curves bear his name.
知っていましたか?ベクターグラフィックの基礎であるベジェ曲線は、1960年代初頭に2人のフランス人エンジニアによってそれぞれ独立して開発されました。ルノー社のピエール・ベジェ氏とシトロエン社のポール・ド・カステリョ氏です。彼らはどちらも自動車のボディデザインのためのコンピューター支援設計手法に取り組んでいました。ベジェ氏の研究が先に発表されたため、曲線は彼の名前を冠しています。
まとめ
<path>
要素は、SVGで最も表現力豊かな描画ツールです。移動、直線、ベジェ曲線、円弧といったコマンドを組み合わせることで、想像できるほぼすべての形を描き出すことができます。各コマンドの動作と、特にベジェ曲線の制御点の役割を理解することが、パスを自在に操るための鍵となります。
インタラクティブデモで制御点をドラッグしたり、スライダーを操作したりして、パスの挙動を身体で覚えてみてください。最初は複雑に感じるかもしれませんが、慣れれば非常に強力な武器になります。
次は、「色とスタイル - 見た目を飾ろう」で、これらのパスや図形に美しい見た目を与える方法を探求しましょう!
このページの要約
日本語
SVGの <path>
要素は、d
属性に記述された一連のコマンドを使って複雑な図形を描画します。主なコマンドには、M
(移動)、L
(直線)、H
(水平線)、V
(垂直線)、C
(3次ベジェ曲線)、S
(滑らかな3次ベジェ曲線)、Q
(2次ベジェ曲線)、T
(滑らかな2次ベジェ曲線)、A
(円弧)、Z
(パスを閉じる)があります。コマンドには絶対座標(大文字)と相対座標(小文字)があり、これらを組み合わせることで自由な形状を作成できます。ベジェ曲線の制御点を操作することで、曲線の形状を調整できます。
English
The SVG <path>
element draws complex shapes using a series of commands written in its d
attribute. Key commands include M
(moveto), L
(lineto), H
(horizontal lineto), V
(vertical lineto), C
(cubic Bézier curveto), S
(smooth cubic Bézier curveto), Q
(quadratic Bézier curveto), T
(smooth quadratic Bézier curveto), A
(elliptical arc), and Z
(closepath). Commands can use absolute (uppercase) or relative (lowercase) coordinates, allowing for versatile shape creation. The shape of Bézier curves can be adjusted by manipulating their control points.
Español
El elemento <path>
de SVG dibuja formas complejas usando una serie de comandos escritos en su atributo d
. Los comandos clave incluyen M
(mover a), L
(línea a), H
(línea horizontal a), V
(línea vertical a), C
(curva Bézier cúbica a), S
(curva Bézier cúbica suave a), Q
(curva Bézier cuadrática a), T
(curva Bézier cuadrática suave a), A
(arco elíptico) y Z
(cerrar ruta). Los comandos pueden usar coordenadas absolutas (mayúsculas) o relativas (minúsculas), permitiendo la creación versátil de formas. La forma de las curvas Bézier se puede ajustar manipulando sus puntos de control.
中文
SVG的<path>
元素通过在其d
属性中写入的一系列命令来绘制复杂形状。关键命令包括M
(移动到)、L
(绘制直线到)、H
(绘制水平线到)、V
(绘制垂直线到)、C
(绘制三次贝塞尔曲线到)、S
(绘制平滑三次贝塞尔曲线到)、Q
(绘制二次贝塞尔曲线到)、T
(绘制平滑二次贝塞尔曲线到)、A
(绘制椭圆弧)和Z
(闭合路径)。命令可以使用绝对坐标(大写)或相对坐标(小写),从而可以灵活创建各种形状。可以通过操纵贝塞尔曲线的控制点来调整其形状。