![見出し画像](https://assets.st-note.com/production/uploads/images/110481859/rectangle_large_type_2_76e6d7710a320e4a8cd2f37b2f9e9d90.jpeg?width=800)
ジェネラティブアート実験🧪 Code interpreterツンデレ編 呪文
GPT4さんの「Code interpreter」という新機能が使えるようになったので、ジェネラティブアートを試してみました。
ジェネラティブアートは、アルゴリズムやランダム性を利用して作成される芸術作品の一つです。以下に、Pythonの基本的な機能を使用してジェネラティブアートを作成する例を示します。
この例では、無数の円をランダムな位置、サイズ、透明度で描画し、それによって生成されるパターンを観察します。
ただし、注意点として、このコードはランダム性を用いているため、実行するたびに結果が異なります。ジェネラティブアートの醍醐味の一つでもあります。
Finished working
Show work
![](https://assets.st-note.com/img/1689003442597-hEwsjIUeBm.png?width=800)
上記の結果は、500個のランダムな位置、サイズ、透明度で描画された円から成るジェネラティブアートの一例です。これらの円は互いに重なり合い、深みやテクスチャを生み出しています。
このようなシンプルなアルゴリズムでも美しいパターンを生成できることが、ジェネラティブアートの魅力の一つです。円の数や位置、サイズ、透明度のパラメータを調整することで、さまざまな表現が可能になります。
なお、このコードはランダム性を利用しているため、実行するたびに異なる結果が得られます。それはまさにジェネラティブアートの一部であり、再現性のない一瞬の美を捉えることができます
import numpy as np
ランダムな円を描画する関数
def draw_circle(ax, xy, radius, color='b', alpha=1.0):
circle = plt.Circle(xy, radius, color=color, fill=True, alpha=alpha)
ax.add_artist(circle)
プロットエリアの設定
fig, ax = plt.subplots(figsize=(6, 6))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ランダムな位置、半径、透明度で円を描画
np.random.seed(0)
for _ in range(500):
xy = np.random.uniform(0, 1, 2) # ランダムな位置
radius = np.random.uniform(0.01, 0.02) # ランダムな半径
alpha = np.random.uniform(0.1, 0.5) # ランダムな透明度
draw_circle(ax, xy, radius, color='b', alpha=alpha)
枠線を非表示
plt.axis('off')
plt.show()
とのこと。これを一瞬で簡単に作成できるので、遊びがいがありそうです🐱。
![](https://assets.st-note.com/img/1689023361446-tSJKxt3XOv.png?width=800)
上記のグラフは、ランダムなパラメータを使用して生成された9つのフラクタルツリーを示しています。それぞれのツリーは、枝の分岐角度とスケーリングファクターが異なり、それにより異なる形状とパターンが生じています。このように、ジェネレイティブアートは単純なルールとランダム性から複雑なパターンを生み出すことができます。
フラクタルツリーの生成に使用したコードは、再帰的な関数 draw_tree を定義しています。この関数は、現在の枝(線分)の終点から2つの新しい枝を描きます。新しい枝は、指定された角度で前の枝に対して回転し、前の枝の長さの一部(スケーリングファクターにより決定される)だけ伸びます。このプロセスは指定された深さ(ここでは8)に到達するまで再帰的に繰り返されます。
それぞれのフラクタルツリーの分岐角度とスケーリングファクターは、0からπ/2(90度)および0.5から0.8の範囲でランダムに選ばれます。これにより、各ツリーは異なる形状となります。
![](https://assets.st-note.com/img/1689023688746-w3QhsuN8i0.png?width=800)
上記の図は、ランダムウォーク(ドランクンウォーク)を使用して生成された9つのジェネレイティブアートを示しています。それぞれのウォークは、ランダムに選択された色と線の太さ、ステップ数で描かれています。
ランダムウォークは、各ステップでランダムに方向を選択するシンプルな確率過程です。この例では、各ステップで上、下、左、または右のいずれかに進むことを選択します。これにより、ウォークは各ステップでランダムに選択された方向に進み、複雑なパターンを形成します。
![](https://assets.st-note.com/img/1689023925158-GtNdFKoGxF.png?width=800)
上記の図は、パーセプトロンの重みをランダムに選択して生成された9つのパターンを示しています。それぞれのパターンは、2次元平面上の各点に対してパーセプトロンの出力を計算し、その出力を用いて点の色を決定しています。
パーセプトロンは、最も基本的な人工ニューラルネットワークの一つで、一連の入力を取り、それらを重み付けして足し合わせ、出力を生成します。この例では、入力は点の xx 座標、yy 座標、および原点からの距離 (x2+y2x2+y2) で、出力は点の色となっています。
パーセプトロンの重みは −1−1 から 11 の範囲でランダムに選ばれ、これにより各パターンは異なる見た目を持ちます。出力は tanhtanh 関数を通じて −1−1 から 11 の範囲にスケーリングされ、この値は 'seismic' カラーマップを用いて色に変換されます。
![](https://assets.st-note.com/img/1689024253375-RW3Jmk851m.png?width=800)
上記の図は、シンプルなネコのシルエットを描画したものです。このシルエットは、円と線で構成されています。円は Ellipse クラスを使って描画し、線は plot 関数を使って描画しています。
具体的には、次の部分を描画しています:
体:横長の楕円で描画しています。
頭:縦長の楕円で描画しています。
目:白色の小さな楕円で描画しています。
耳:線を使って三角形を描画しています。
尾:曲線を使って描画しています。
このようなシンプルな形状を組み合わせることで、ネコの抽象的なシルエットを描くことができます。ジェネレイティブアートの一例として、このシルエットを基に色や形状をランダムに変更し、それぞれ異なるネコのシルエットを生成することが可能です。
ただし、これは非常にシンプルで抽象的な表現であり、具体的なネコの特徴や細部を描き出すのは困難です。より詳細なネコの画像を生成するには、ディープラーニングなどの高度な手法が必要となります。
![](https://assets.st-note.com/img/1689025305734-omvfKxZHr9.png?width=800)
"いやーん"の感情を視覚的に表現したジェネレイティブアートを作成しました。色彩の強さと放射状のパターンが、驚きや恥ずかしさ、あるいは戯れた抗議といった感情を視覚的に表現しています。
![](https://assets.st-note.com/img/1689024905934-2kHPHEtWIf.png?width=800)
ツンデレの感情を視覚的に表現したジェネレイティブアートを作成しました。青と紫の部分は「ツン」(冷たい)を、赤とピンクの部分は「デレ」(優しい)を表現しています。この2つの感情が混ざり合うところが、ツンデレの特徴を象徴しています。
以上本日の実験でした。
この記事が気に入ったらサポートをしてみませんか?