はじめに
この作品は 2020 年 4 月 1 日から 5 月 14 日にかけて開催された、 #dailycodingchallenge の 5 月 1 日のお題「回る」についての作品です。
お題:回る
— Koji Saito (@KojiSaito) May 1, 2020
文字数超過で、つぶやきProcessing できず(残念)。
ようやくサイトができたので、こちらのソースコードも順次公開していきます。
ちなみに奥行き情報は変動させてません。
このあたりも解説できれば、と思ってます。#dailycodingchallenge https://t.co/oAEvEgz1wz pic.twitter.com/XsHSBp2jCq
ツィートにあるように、この作品では特に奥行き情報 ー 回転中心の Z 座標 ー は変動させていません。
ソースコードおよび解説
M=100
R=random
def setup(): size(500,500,P3D)
P=[[R(1000)-100,-R(1000),-R(10),R(25)+5] for i in [0]*M]
def draw():
background(-8)
for i in range(M):
e=P[i]
push()
translate(e[0],e[1])
rotateY(e[2])
d=e[3]
square(-d/2,-d/2,d)
pop()
e[1]+=1
e[2]+=.1
if e[1]>500:
P[i]=[R(1000)-100,0,-R(10),R(25)+5]
ソースコードをみてみれば、何のことはなく、 単に大きさの異なる正方形を rotateY で回しているだけだと分かります。
それぞれの正方形の位置は、 グローバル変数 P に格納されており、 i 番目の正方形の情報として P[i][0] と P[i][1] で位置 (x,y) を、 P[i][2] で回転量を、P[i][3] で正方形の大きさ表すようにしています。