まくろぐ
更新: / 作成:

svgpath 要素を使用すると、直線と曲線を組み合わせて多様な図形を描画できます。 図形の形状は、path 要素の d 属性に一連のコマンドを指定することで定義されます(参考: path 要素のチートシート)。

しかし、ベジェ曲線の制御点をどのように指定すれば、どのような曲線が描かれるのかが直感的に理解しにくいことがあります。 ここではさまざまな曲線の描画例を紹介します。

C / S コマンドによる 3 次ベジェ曲線

C コマンド は、2 つの制御点と終点を指定することで、始点(現在座標)と終点を曲線で繋ぎます。 pathd 属性の内容は、M始点 C制御点1 制御点2 終点 のような形で指定することになります。

(0, 0)(5, 70)(95, 70)(100, 0)
始点 制御点1
制御点2 終点
<path d="M0,0 C5,70 95,70 100,0" stroke="black" stroke-width="2" fill="none" />
(0, 50)(50, 150)(50, -50)(100, 50)
始点 制御点1
制御点2 終点
<path d="M0,50 C50,150 50,-50 100,50" stroke="black" stroke-width="2" fill="none"/>

C コマンドによる 3 次ベジェ曲線に続けて次の曲線を描く場合、S コマンド を使用すると 1 つ目の制御点を省略してなめらかに繋ぐことができます。 この場合、先行する曲線の 2 つ目の制御点の反対側に 1 つ目の制御点を指定したのと同様に振る舞います。 S コマンドの引数としては、2 つの座標値を S制御点2 終点 の形で渡します(C コマンドと異なり、制御点 1 の座標値を省略します)。

(0, 50)(20, 100)(80, 100)(100, 50)(180, 0)(200, 50)
始点
Cコマンドの制御点1
Cコマンドの制御点2
Cコマンドの終点 = 2つ目の始点
Sコマンドの(仮想的な)制御点1
Sコマンドの制御点2
Sコマンドの終点
<path d="M0,50 C20,100 80,100 100,50 S180,0 200,50" stroke="black" stroke-width="2" fill="none"/>

Q / T による 2 次ベジェ曲線

Q コマンド を使った 2 次ベジェ曲線は、制御点を 1 つだけ指定するので C コマンド(3 次ベジェ曲線)よりも簡単です。

(0, 0)(50, 100)(100, 0)
始点 制御点 終点
<path d="M0,0 Q50,100 100,0" stroke="black" stroke-width="2" fill="none"/>

Q コマンドの曲線に続けて次の曲線を描画するときは、T コマンド を使うことで制御点の指定を省略できます。 その場合、先行する曲線の制御点の反対側に制御点を指定したのと同様に振る舞います。

(0, 50)(40, 100)(80, 50)(160, 50)
始点
Qコマンドの制御点
Qコマンドの終点 = 2つ目の始点
Tコマンドの(仮想的な)制御点
Tコマンドの終点
<path d="M0,50 Q40,100 80,50 T160,50" stroke="black" stroke-width="2" fill="none"/>

関連記事

まくろぐ
サイトマップまくへのメッセージ