processing言語で、いくつかの振り子を作るコードなのですが、
Branch [] children = new Branch[0];
の配列の長さをなぜ0にしているのか。
また
Branch(float lev, float ind, float ex, float why) {
//中略
for (int x=0; x<_numChildren; x++) {
children[x] = new Branch(level+1, x, endx, endy);
}
}
}
と再起しているところは、おそらくchildren[0]の中にchildren[0],children[1],children[2]となっていくと理解しております。
しかし、そうしますと、以降のchildren[0],children[1],,,などを呼び出す際にダブりが、生じてしまうと思います。
なぜこれで合っているのか教えていただきたいです。
int _numChildren = 3; // limit on number of branches int _maxLevels = 3; // the maximum depth Branch _trunk; // the trunk of our fractal "tree" // ======================= init void setup() { size(1500,1000); background(255); noFill(); smooth(); newTree(); } void newTree() { _trunk = new Branch(1, 0, width/2, 50); //_trunk.drawMe(); } void draw() { background(255); _trunk.updateMe(width/2, height/2); _trunk.drawMe(); } // ======================= Branch object class Branch { float level, index; float x, y; float endx, endy; float strokeW, alph; // drawing style float len, lenChange; // line length float rot, rotChange; // rotation Branch [] children = new Branch[0]; //疑問 // array of children Branch(float lev, float ind, float ex, float why) { level = lev; index = ind; strokeW = (1/level) * 10; alph = 255 / level; len = (1/level) * random(200); rot = random(360); lenChange = random(10) - 5; rotChange = random(10) - 5; updateMe(ex, why); // make children if (level < _maxLevels) { children = new Branch[_numChildren]; for (int x=0; x<_numChildren; x++) { children[x] = new Branch(level+1, x, endx, endy);//疑問 } } } void updateMe(float ex, float why) { x = ex; y = why; rot += rotChange; if (rot > 360) { rot = 0; } else if (rot < 0) { rot = 360; } len -= lenChange; if (len < 0) { lenChange *= -1; } else if (len > 200) { lenChange *= -1; } float radian = radians(rot); endx = x + (len * cos(radian)); endy = y + (len * sin(radian)); for (int i=0; i<children.length; i++) { children[i].updateMe(endx, endy); //ダブるのではないか } } void drawMe() { strokeWeight(strokeW); stroke(0, alph); fill(255, alph); line(x, y, endx, endy); ellipse(endx, endy, len/12, len/12); for (int i=0; i<children.length; i++) { children[i].drawMe(); //ダブるのではないか } } }
回答1件
あなたの回答
tips
プレビュー