![見出し画像](https://assets.st-note.com/production/uploads/images/87627627/rectangle_large_type_2_7914875f337ed2031f2ace7a89ffac33.png?width=800)
2022年9月の趣味コーディング
今月趣味で書いたプログラムの、まとめ!
今月も何作か#つぶやきProcessingに挑戦しました。
Twitterで「つぶやきProcessing でステンドグラスを描けないだろうか」というお題(?)が出されていたので、なんとかそれっぽいものが作れないか挑戦。
size(720,720)
— ryotako (@ryotakob) September 5, 2022
N=72
def F(a,b,c,d,e,f,n=400):
if n>N:x=(a+c+e)/3;y=(b+d+f)/3;F(a,b,x,y,c,d,n/2);F(x,y,a,b,e,f,n/2);F(e,f,c,d,x,y,n/2)
else:fill(3*d,5*b,5*f,random(f*N));triangle(a,b,c,d,e,f)
scale(5)
translate(N,N)
for _ in"#つぶやきProcessing":rotate(PI/2);F(0,0,-N,N,N,N) pic.twitter.com/GjYcXF39Ya
これは三角形を分割→分割後の三角形をさらに分割、を繰り返して模様にしたもの。でも実際のステンドグラスはこんな鋭角に分割されてはいない感じがします。
この「ステンドグラスっぽいつぶやきProcessingを作るチャレンジ」の過程で複素変換を利用するアイデアも考えたのですが、結局ボツになったので別個につぶやきに。
N=720
— ryotako (@ryotakob) September 12, 2022
size(720,720)
for i in range(N*N):
z=((i/N-N/2+(i%N-N/2)*1j)/N)**2.5*120
set(i/N,i%N,color(floor(sin(z.real)*sin(z.imag))))#つぶやきProcessing pic.twitter.com/eRYoswdolv
これは複素数zの2.5乗を利用したもの。pythonモードではデフォルトで複素数が扱えるので、短いコードの割に面白い模様ができました。
size(720,720)
— ryotako (@ryotakob) September 12, 2022
N=720
background(0,0,N)
for i in range(2*N):
for j in range(N):
z=map(i%N,1,N,-3,3)+map(j,1,N,-3,3)*1j;w=(z+(-1)**(i/N)*(z*z-4*2.72**7j)**.5)/2+.1+.3j
if abs(w)>1.3:set(i%N,j,color(0,45*ceil(sin(4*PI*abs(w))*sin(20*atan2(w.real,w.imag))),99))#つぶやきProcessing pic.twitter.com/LSPRFusvwV
さらにこちらは、ジューコフスキー変換(このコードでは逆ジューコフスキー変換?)とよばれる複素変換を使用したもの。飛行機の翼の断面っぽい形状が得られる変換で、流体力学で使われる変換だとか。
あと今月は某イカのゲームをプレイしていて、それをイメージした作品も作ってみました。
add_library("PixelFlow")
— ryotako (@ryotakob) September 19, 2022
N=400
size(400,400,P2D)
F=DwFluid2D(DwPixelFlow(this),N,N,2)
for _ in "#つぶやきProcessing"*9:F.update();[F.addTemperature(i,1,4,2+(i%3.9)*i/N)for i in range(N)]
F.renderFluidTextures(g,1)
for i in range(N*N):set(i/N,i%N,[-6**3,-23**6][get(i/N,i%N)>-1e5]) pic.twitter.com/z78zCHmnGM
S=sin
— ryotako (@ryotakob) September 21, 2022
size(720,720)
clear()
noStroke()
colorMode(3,9)
for k in range(80):
with push():fill([3,5,8][k%3],4,9);scale(S(k));translate(1e3*S(k**3),1e3*S(k**7));[(rotate(.52),[circle(i,0,min(sq(i-160)/99+9,99))for i in range(205+int(25*S(j*k)))])for j in range(12)]#つぶやきProcessing pic.twitter.com/OHmPduAm3w
以上、今月の趣味コーディングでした!
この記事が気に入ったらサポートをしてみませんか?