//q12243404442
class Cyc {
int index;
int max;
ArrayList<PVector> dirs;
Cyc(int max) {
this.max = max;
index = 0;
dirs = new ArrayList<PVector>();
for(int i=0; i<max; i++){
float x = cos(i*TWO_PI/max);
float y = sin(i*TWO_PI/max);
dirs.add(new PVector(x, y));
}
}
PVector get() {
return dirs.get(index);
}
void next() {
index++;
if (index == max) {
index = 0;
}
}
}
void setup() {
size(800, 600);
Cyc cyc = new Cyc(4);
PVector start = new PVector(width/2, height/2);
PVector end = new PVector(width/2, height/2);
background(0);
float w = 30;
PVector d = new PVector(w, w);
PVector base = new PVector(w, w);
stroke(255);
int loop = 37;
for (int i=0; i<loop; i++) {
if (i>0) {
if (i%2==0) {
d.add(base);
}
}
end.add(new PVector(d.x*cyc.get().x, d.y*cyc.get().y));
cyc.next();
line(start.x, start.y, end.x, end.y);
start = end.copy();
}
}
Ly9xMTIyNDM0MDQ0NDIKCmNsYXNzIEN5YyB7CiAgaW50IGluZGV4OwogIGludCBtYXg7CiAgQXJyYXlMaXN0PFBWZWN0b3I+IGRpcnM7CgogIEN5YyhpbnQgbWF4KSB7CiAgICB0aGlzLm1heCA9IG1heDsKICAgIGluZGV4ID0gMDsKICAgIAogICAgZGlycyA9IG5ldyBBcnJheUxpc3Q8UFZlY3Rvcj4oKTsKICAgIAogICAgZm9yKGludCBpPTA7IGk8bWF4OyBpKyspewogICAgICBmbG9hdCB4ID0gY29zKGkqVFdPX1BJL21heCk7CiAgICAgIGZsb2F0IHkgPSBzaW4oaSpUV09fUEkvbWF4KTsKICAgICAgZGlycy5hZGQobmV3IFBWZWN0b3IoeCwgeSkpOwogICAgfQogIH0KCiAgUFZlY3RvciBnZXQoKSB7CiAgICByZXR1cm4gZGlycy5nZXQoaW5kZXgpOwogIH0KICB2b2lkIG5leHQoKSB7CiAgICBpbmRleCsrOwogICAgaWYgKGluZGV4ID09IG1heCkgewogICAgICBpbmRleCA9IDA7CiAgICB9CiAgfQp9Cgp2b2lkIHNldHVwKCkgewogIHNpemUoODAwLCA2MDApOwoKICBDeWMgY3ljID0gbmV3IEN5Yyg0KTsKICBQVmVjdG9yIHN0YXJ0ID0gbmV3IFBWZWN0b3Iod2lkdGgvMiwgaGVpZ2h0LzIpOwogIFBWZWN0b3IgZW5kID0gbmV3IFBWZWN0b3Iod2lkdGgvMiwgaGVpZ2h0LzIpOwogIAogIGJhY2tncm91bmQoMCk7CiAgCiAgZmxvYXQgdyA9IDMwOwogIFBWZWN0b3IgZCA9IG5ldyBQVmVjdG9yKHcsIHcpOwogIFBWZWN0b3IgYmFzZSA9IG5ldyBQVmVjdG9yKHcsIHcpOwoKICBzdHJva2UoMjU1KTsKICAKICBpbnQgbG9vcCA9IDM3OwogIGZvciAoaW50IGk9MDsgaTxsb29wOyBpKyspIHsKICAgIGlmIChpPjApIHsKICAgICAgaWYgKGklMj09MCkgewogICAgICAgIGQuYWRkKGJhc2UpOwogICAgICB9CiAgICB9CiAgICAKICAgIGVuZC5hZGQobmV3IFBWZWN0b3IoZC54KmN5Yy5nZXQoKS54LCBkLnkqY3ljLmdldCgpLnkpKTsKICAgIGN5Yy5uZXh0KCk7CiAgICAKICAgIGxpbmUoc3RhcnQueCwgc3RhcnQueSwgZW5kLngsIGVuZC55KTsKICAgIAogICAgc3RhcnQgPSBlbmQuY29weSgpOwogIH0KfQo=