4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTで図形を描画させる

Last updated at Posted at 2023-03-22

経緯

ChatGPTが流行ってるので遊んでいる。
「SVGで」と頼めば図形も描画してくれるらしい。

svgで円を書いてください

SVGで円を描くには、タグを使用します。以下は、SVG内で円を描く基本的な例です。半径、中心のX座標、中心のY座標、および塗りつぶし色を指定します。

html
<!DOCTYPE html>
<html>
<body>

<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" fill="blue" />
</svg>

</body>
</html>

このコードは、半径40ピクセル、中心座標が(50, 50)で、青色の円を描画します。widthとheight属性でSVGキャンバスのサイズを調整できます。また、fill属性を変更することで、円の塗りつぶし色を変更できます。

円.jpg

svgで星を書いてください

html
<!DOCTYPE html>
<html>
<body>

<svg width="200" height="200">
  <polygon points="100,10 40,198 190,78 10,78 160,198" fill="yellow" />
</svg>

</body>
</html>

星.jpg

svgで11角形を書いて下さい

html
<!DOCTYPE html>
<html>
<body>

<svg width="300" height="300">
  <polygon points="
    150,25
    227.522,60.363
    244.966,137.639
    195.105,208.972
    104.895,208.972
    55.034,137.639
    72.478,60.363
  " fill="green" />
</svg>

</body>
</html>

7.jpg

7角形に見えます

申し訳ありません。正しい正11角形のSVGコードを以下に示します。

html
<!DOCTYPE html>
<html>
<body>

<svg width="300" height="300" viewBox="0 0 300 300">
  <polygon points="
    150,25;
    219.641,60.450;
    248.268,132.082;
    218.142,203.644;
    150,235.450;
    81.858,203.644;
    51.732,132.082;
    80.359,60.450;
  " fill="green" />
</svg>

</body>
</html>

セミコロンが余分なようだ。
8.jpg

pointsの中にあるセミコロンは省いてください。あと8角形に見えます。

html
<!DOCTYPE html>
<html>
<body>

<svg width="300" height="300">
  <polygon points="
    150,20
    231.416,60.45
    246.283,143.402
    200,215.45
    100,215.45
    53.717,143.402
    68.584,60.45
  " fill="green" />
</svg>

</body>
</html>

7b.jpg

7角形に戻りました。11角形は難しいかな?

申し訳ありません。今度こそ正11角形のSVGコードを提供します。

html
<!DOCTYPE html>
<html>
<body>

<svg width="300" height="300">
  <polygon points="
    150,30
    215.23,66.674
    242.076,130.602
    200.276,191.147
    130.234,207.608
    69.766,207.608
    0.276,191.147
    57.924,130.602
    84.77,66.674
  " fill="green" />
</svg>

</body>
</html>

9.jpg

9角形に見えます

申し訳ありません。再度、正確な正11角形のSVGコードを提供します。

html
<!DOCTYPE html>
<html>
<body>

<svg width="300" height="300">
  <polygon points="
    150,25
    212.879,65.684
    239.471,132.082
    211.281,196.517
    150,230
    88.719,196.517
    60.529,132.082
    87.121,65.684
  " fill="green" />
</svg>

</body>
</html>

8b.jpg

11角形を書くには難しそうなので、svgで正N角形を描画する関数をjsで作って下さい

JavaScriptを使用して、SVG内に正N角形を描画する関数を作成しました。この関数は、要素ID、頂点数、半径、塗りつぶし色を引数にとります。

html
<!DOCTYPE html>
<html>
<body>

<svg id="my-svg" width="300" height="300">
</svg>

<script>
function drawRegularPolygon(elementId, n, radius, fillColor) {
  const svgElement = document.getElementById(elementId);
  let points = '';

  for (let i = 0; i < n; i++) {
    const angle = (2 * Math.PI / n) * i;
    const x = radius * Math.cos(angle) + radius;
    const y = radius * Math.sin(angle) + radius;

    points += `${x},${y} `;
  }

  const polygonElement = document.createElementNS("http://www.w3.org/2000/svg", "polygon");
  polygonElement.setAttribute("points", points);
  polygonElement.setAttribute("fill", fillColor);

  svgElement.appendChild(polygonElement);
}

// 関数を使用して正11角形を描画します
drawRegularPolygon("my-svg", 11, 100, "green");
</script>

</body>
</html>

このコードは、緑色の正11角形を描画します。関数 drawRegularPolygon を使用して、任意の正N角形を描画できます。必要に応じて、他の要素ID、頂点数、半径、および塗りつぶし色で関数を呼び出します。

11.jpg

おみごと!

余談

もう少し知能が上がればプログラマ要らなくなるかもね。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?