三角形の辺の上を移動しながら結ぶ線
リファレンスのGIFアニメーションをTwitterのタイムラインで見て,なんとなく書けそうと思って書いてみた.書けた.
コード
int num = 50; float r = 270; int current = 0; ArrayList<PVector> triangle = new ArrayList<PVector>(); ArrayList<PVector> points = new ArrayList<PVector>(); // setup関数 : 初回1度だけ実行される void setup() { //frameRate(1); size(960, 540); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100); // HSBでの色指定にする smooth(); // 描画を滑らかに for (int i = 0; i < 3; i++) { PVector tp = new PVector(cos(TWO_PI * i/3f)*r, sin(TWO_PI * i/3f)*r); triangle.add(tp); } int n = 0; for (int i = 0; i < num * 3; i++) { if (i>0 && i%num == 0) { n++; } PVector t1 = triangle.get(n%3); PVector t2 = triangle.get((n+1)%3); PVector p = PVector.lerp(t1, t2, (float(i)%num)/float(num)); points.add(p); } } // draw関数 : setup関数実行後繰り返し実行される void draw() { noStroke(); fill(0, 0, 0, 50); rect(0, 0, width, height); translate(width/2, height/2+50); rotate(PI/6); noFill(); strokeWeight(2); stroke(frameCount%360, 40, 100); for (int n = current; n < current + num/3; n++) { PVector c1 = points.get(n%(num*3)); PVector c2 = points.get((n+num)%(num*3)); line(c1.x, c1.y, c2.x, c2.y); } current++; strokeWeight(4); stroke(0,0,100); for (PVector p : points) { point(p.x, p.y); } }
リファレンス
— 無限ループgifが僕の心を癒すんだ (@InfinityLoopGIF) 2017年11月29日