# 巻き取れる格子

「c」で回転方向の切り替え。

```/**
* winding lattice
*
* @author aa_debdeb
* @date 2016/07/28
*
* press "c" to toggle the direction of rotation
*
*/

int sampleStep = 2;
int lineStep = 10;
boolean clockwise = true;

PVector[][] points;

void setup(){
size(500, 500);
strokeWeight(2);
stroke(0, 153, 153);
noFill();

int sampleNum = width / sampleStep + 1;
points = new PVector[sampleNum][sampleNum];
for(int x = 0; x < sampleNum; x++){
for(int y = 0; y < sampleNum; y++){
points[x][y] = new PVector(x * sampleStep, y * sampleStep);
}
}
}

void draw(){
background(255);
int step = lineStep / sampleStep;
for(int x = 0; x < points.length; x += step){
beginShape();
curveVertex(points[x][0].x, points[x][0].y);
for(int y = 0; y < points[x].length; y += 1){
curveVertex(points[x][y].x, points[x][y].y);
}
curveVertex(points[x][points[x].length - 1].x, points[x][points[x].length - 1].y);
endShape();
}

for(int y = 0; y < points[0].length; y += step){
beginShape();
curveVertex(points[0][y].x, points[0][y].y);
for(int x = 0; x < points.length; x += 1){
curveVertex(points[x][y].x, points[x][y].y);
}
curveVertex(points[points[0].length - 1][y].x, points[points[0].length - 1][y].y);
endShape();
}

if(mousePressed){
PVector mouse = new PVector(mouseX, mouseY);
for(int x = 0; x < points.length; x++){
for(int y = 0; y < points[x].length; y++){
float d = PVector.dist(mouse, points[x][y]);
if(d < 200){
PVector force = PVector.sub(points[x][y], mouse);
force.normalize();
force.mult(map(d, 0, 200, 2, 0));
if(clockwise){
force.rotate(HALF_PI);
} else {
force.rotate(-HALF_PI);
}