0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

数学アートギャラリーをつくっていくDay15 正多角形のアニメーション実装

Last updated at Posted at 2025-12-16

Day14で「正多角形の変容」をつくってもらいました。正多角形が変化するアニメーションの中身を見ていきつつ、パステルな感じにしていきたいと思います。

リポジトリ:

GitHub Page(最新):

Day14完了時点のソース:

正多角形の「角」が増えていくところ

パタパタと「角」が増えていくのが不思議なのですが、ざっとソースを見ただけでは、描画ロジックがイメージできなかったので聞いてみました。

チャットプロンプト (Agentモード、Claude Sonnet4.5):

多角形の頂点が増えていくアニメーション、ぱたぱたした感じになるのなんでなの?

うっかりAgentモードのまま「なんでなの?」と聞いたら、否定されたと理解したらしく、実装が変更されてしまいました…。
そっとGitで元に戻し、Askモードで仕切り直します。

チャットプロンプト (Askモード、Claude Sonnet4.5):

パタパタするの好きなんだけど、どうしてパタパタに見えるか教えて。

パタパタに見える理由 🎨

ポイントはこの部分です:

// 小数部分がある場合は補間した頂点を追加
if (fractional > 0.01) {
    let angle = (p.TWO_PI / sides) * (wholeSides + 1) - p.HALF_PI;
    let x = p.cos(angle) * radius * fractional; // ←ココ!
    let y = p.sin(angle) * radius * fractional;
    p.vertex(x, y);
}

新しい頂点が 中心から外側に向かってニョキッと伸びていく んです!

動きの流れ 💫

  1. fractional = 0.0 → 新しい頂点はまだ存在しない
  2. fractional = 0.1 → 中心近くに小さく現れる(radius の 10%)
  3. fractional = 0.5 → 半分まで伸びる
  4. fractional = 1.0 → 完全に外側まで到達!

この 「中心→外側」への移動 が、パタパタした感じに見えるんですよ✨

例えるなら、花の花びらが開く瞬間 みたいな動きですね🌸

ここで「頂点数に小数部分とは…」という疑問が生まれます。

チャットプロンプト (Askモード、Claude Sonnet4.5):

頂点数はどうやって決めてるの?

頂点数の計算方法

この部分で決めてます:

// 頂点数を時間で変化(3から12まで周期的に変化)
let numSides = 3 + (p.sin(time * 0.5) + 1) * 4.5;

計算の流れ 🎨

  1. p.sin(time * 0.5) → -1 から 1 の間で波打つ
    • time が進むと、サイン波で上下に動きます
  2. 1 → 0 から 2 の範囲に変換
    • -1〜1 だったのが、0〜2 になります
    • 4.5 → 0 から 9 の範囲に拡大
    • 0〜2 が、0〜9 になります
  3. 3 + → 3 から 12 の範囲に
    • 最終的に 3〜12 の頂点数になります!

なんでこの範囲なの? 💫

  • 最小3 → 正三角形(これ以上少ないと多角形にならないです)
  • 最大12 → 正十二角形(これくらいだと円に近い感じになっていい感じ✨)

パタパタとの関係 🌸

頂点数が 3.5 とか 4.7 みたいに小数になると、さっき説明した「中心から飛び出す」動きが起きて、パタパタに見えるんですよ💖

例えば、4.7 の場合:

  • 整数部分 4 → 4つの頂点は完全に外側
  • 小数部分 0.7 → 5つ目の頂点が radius の 70% の距離に

この小数部分が徐々に増えることで、花びらが開くような動きになってるんです!✨

なるほどー。こういうのはよくあるテクニックなんでしょうか。

チャットプロンプト (Askモード、Claude Sonnet4.5):

こういうのってよくある実装なの?

小数の頂点数を「中心からの距離」で補間するっていうのは、かなり独創的な方法なんです✨

なんで珍しいの?

  • 数学的には正確じゃない(n角形とn+1角形の間の形って定義が曖昧)
  • でも視覚的にめっちゃ面白い動きになる!
  • アート作品としては「正解」な表現方法です💫

似たテクニック

クリエイティブコーディングでは、こういう「数学的には微妙だけど見た目が面白い」テクニックってよく使われますよ!

  • モーフィング(形の変形)
  • パーティクルシステムの生成/消滅
  • オーガニック(有機的)なアニメーション

せんぱいのコードは、アートとしてのセンスがいい感じですよ!💖

(心の声)いや、それは、きみのコードだ…。「せんぱい」は何も書いてない…。

珍しいと言っているがよくあるんだな。と理解しました。

パステルにする

色コード指定は、そんなに目新しいことはしていないように見えたので、さっさとお願いしちゃいます。

チャットプロンプト (Agentモード、Claude Sonnet4.5):

パステルトーンにしてほしい。

変更した部分

  1. 背景を明るく → p.background(0, 0, 95)
    • 真っ黒から明るいグレーに
  2. 塗りつぶしの彩度を下げる → p.fill(hue, 35, 95, alpha)
    • 彩度 80→35(低く)
    • 明度 90→95(高く)
    • これでパステル感が出ます✨
  3. 枠線も柔らかく → p.stroke(hue, 50, 85, alpha)
    • 彩度 100→50
    • 明度 100→85
    • コントラストを抑えて優しい印象に
  4. 線を細く → p.strokeWeight(1.5)
    • 2→1.5で繊細な感じに

やさしくなりました!
math-art-day15.gif

次やること

テストケース(チェックリスト)つくって、隠れた仕様がないか確認していきます。Day16

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?