SVGについて – パス(円孤)について

javascript

SVGについて – パス(円孤)について

円孤について(正円)

今回はパス(円孤)の使い方について、調べてみます。

円孤を出力するコマンドは Aで記載します。
円孤は開始、終了の座標の値により、描かれるパスが変わり正円と楕円になります。
また、x軸とy軸 の方向にどれだけの長さで線を描画するかで、正円か楕円かが決まります。
(注:円の種類を決める目的で座標を決める訳ではなく、結果的に正円か楕円の描画になるかならないかです)

簡単なサンプルを書きました。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 20 20
                        A 20 20 0 0 1 100 100"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test1.html)

画面にアクセスすると、以下の円孤が表示されます。

孤がどのように描画されるかのポイントとなる点は、 M と A のパラメータの値です。

例えば、以下のパラメータの場合、

M 20 20
A 20 20 0 0 1 100 100

それぞれのパラメータの意味は次のようになります。

パラメータの値の下の行に、汎用的な名称を記載しています。

M 20 20
  x1 y1

A 20 20 0 0  1  100 100
  rx ry k f1 f2 x2  y2

各パラメータの意味は以下のようになります。

x1     円弧の開始 x座標
y1     円弧の開始 y座標
rx     円のx軸半径
ry     円のy軸半径
k      回転度(プラスで右方向、マイナスで左方向)
f1     0 : 180未満の円弧
       1 : 180以上の円弧
f2     0 : 正の角度で動き始めるか (反時計回りに描画)
       1 : 負の角度で動き始めるか (時計回りに描画)
x2     円弧の終了 x座標
y2     円弧の終了 y座標

上記のサンプルでは、描画される孤は x軸方向、y軸方向の開始座標、終了座標が同じ座標を示しており、正円の軌道になります。

円孤について(楕円)

サンプルを少し変更して、次のコードを用意しました。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 0 0 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test2.html)

画面にアクセスすると、以下の円孤が表示されます。

先ほどのサンプルから、A のパラメータを以下のように変更しました。

A 20 30 0 0 1 100 150

最初のサンプルとは違い、開始点から描画される円の「x方向の半径」、「y方向の半径」が異なります。
また、引数の最後の終了x座標、終了y座標も異なります。

このパラメータ指定の場合は、正円の孤にはならず、楕円上の軌道で描画されます。

円孤について(他のパラメータ)

それでは、2つ目のサンプルを調整し、他のパラメータを変更してみます。

Aのパラメータの第三引数が回転度になるので、
それぞれ、0度、45度、90度、135度、180度の指定を試してみます。

Aのみを抜粋すると、以下です。

A 20 30   0 0 1 100 150
A 20 30  45 0 1 100 150
A 20 30  90 0 1 100 150
A 20 30 135 0 1 100 150
A 20 30 180 0 1 100 150

HTML全体は次のようになります。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div>0度</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 0 0 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>


<div>45度</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 45 0 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>


<div>90度</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 90 0 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>


<div>135度</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 135 0 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>


<div>180度</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 30 30
                        A 20 30 180 1 1 100 150"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>


</body>
</html>

サーバ上のHTMLはこちら(test3.html)

画面にアクセスすると、以下の円孤が表示されます。

それぞれの度数によって、楕円の座標の描画が回転して描画されます。
ただ、0度の出力と、180度の出力は同じ結果になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です