私は、この奇妙な例では、楕円のグリッドが互いに崩壊し、爆発的な衝突の一種を作成します。これは興味深い効果ですが、小さな楕円の滑らかな移行が画面の中心に近づき、「爆発」を作り出すこととは逆にゆっくりと移行するにつれ、大きくなるようにしたいと考えています。なぜこのようなことが起こっているのか、私はどこから始めるべきかわかりません。助言がありますか?楕円の衝突で処理ウィンドウが白く(瞬間的に)変わる
私はスクリーンショットを撮ろうとしましたが、爆発をキャプチャするのはかなり難しいです。基本的に、8つの楕円がすべて1つの中心点に入ってから急速に成長すると想像できれば、残りのウィンドウは白くなります。
ArrayList<RotatingEllipse> ellipses = new ArrayList<RotatingEllipse>();
float updateSize = 1;
float minSize = 1;
float maxSize = 10;
float sizeSpeed = 0.015;
void setup() {
size(500, 500);
noStroke();
smooth();
ellipses.add(new RotatingEllipse(width*.25, height*.25));
ellipses.add(new RotatingEllipse(width*.75, height*.25));
ellipses.add(new RotatingEllipse(width*.75, height*.75));
ellipses.add(new RotatingEllipse(width*.25, height*.75));
ellipses.add(new RotatingEllipse(width/2, height*.25));
ellipses.add(new RotatingEllipse(width/2, height*.75));
ellipses.add(new RotatingEllipse(width*.25, height/2));
ellipses.add(new RotatingEllipse(width*.75, height/2));
}
void draw() {
background(#202020);
for (RotatingEllipse e : ellipses) {
e.stepAndDraw();
updateSize = map(sin(frameCount * sizeSpeed), -1.0, 1.0, minSize, maxSize);
}
}
class RotatingEllipse {
float rotateAroundX;
float rotateAroundY;
float distanceFromRotatingPoint;
float angle;
public RotatingEllipse(float startX, float startY) {
rotateAroundX = (width/2 + startX)/2;
rotateAroundY = (height/2 + startY)/2;
distanceFromRotatingPoint = dist(startX, startY, rotateAroundX, rotateAroundY);
angle = atan2(startY-height/2, startX-width/2);
}
public void stepAndDraw() {
angle += PI/128;
float x = rotateAroundX + cos(angle)*distanceFromRotatingPoint;
float y = rotateAroundY + sin(angle)*distanceFromRotatingPoint;
float distance = dist(x, y, width/2, height/2);
float diameter = 50*(200-distance)/500;
float m = map (updateSize, 0, distance, 1, diameter);
ellipse(x, y, m, m);
}
}
元々、私はupdateSizeを持っていなかったし、各楕円の中心点の距離に関連してサイズが大きくなった。しかし、これはスクリーンの中心から各対角楕円のサイズの変化を引き起こした。したがって、私は楕円サイズを作成するために画面の中央に依存していた元のコードに戻って考えました。私はコードを再考する。ありがとう –