3.点と視線 3
2月 3rd, 2010
点の数は多いほど周囲との間隔は狭くなり、面としてはっきり知覚されるようになってくる。
void setup() {
size(500, 500);
background(255);
fill(0);
translate(width/2, height/2);
rotate(radians(-18));
smooth();
for(int i=0; i<5; i++) {
float x = cos(radians(72*i))*150;
float y = sin(radians(72*i))*150;
ellipse(x, y, 80, 80);
}
saveFrame("1-3-5.jpg");
}

上図と同位置に大きさを変えた点が存在しているが、視線の移動順序がはっきりしているので、正5角形ではなく星形に感じやすい。
void setup() {
size(500, 500);
background(255);
fill(0);
translate(width/2, height/2);
rotate(-HALF_PI);
smooth();
int[] size = {100, 60, 20, 80, 40};
float[] x = new float[5];
float[] y = new float[5];
float[] ps1 = new float[2];
float[] ps2 = new float[2];
for(int i=0; i<5; i++) {
x[i] = cos(radians(72*i))*150;
y[i] = sin(radians(72*i))*150;
ellipse(x[i], y[i], size[i], size[i]);
}
for(int i=0; i<5; i++) {
int src = i;
int dst = src+3;
if(dst>4) {
dst -= 5;
}
ps1 = arrowPoint(x[src], y[src], x[dst], y[dst], size[src]*0.5);
ps2 = arrowPoint(x[dst], y[dst], x[src], y[src], size[dst]*0.5);
if(i==2) {
stroke(100);
drawArrow(ps1[0], ps1[1], ps2[0], ps2[1], 210);
} else {
stroke(0);
drawArrow(ps1[0], ps1[1], ps2[0], ps2[1], 260-size[dst]);
}
}
saveFrame("1-3-6.jpg");
}
float[] arrowPoint(float fromX, float fromY, float toX, float toY, float d) {
float[] pos = new float[2];
float dx = toX - fromX;
float dy = toY - fromY;
float angle = atan2(dy, dx);
pos[0] = fromX + cos(angle) * d;
pos[1] = fromY + sin(angle) * d;
return pos;
}
void drawArrow(float fromX, float fromY, float toX, float toY, int len) {
float dx = toX - fromX;
float dy = toY - fromY;
float angle = atan2(dy, dx);
pushMatrix();
translate(fromX, fromY);
rotate(angle);
line(0, 0, len, 0);
line(len, 0, len-10, 5);
line(len, 0, len-10, -5);
popMatrix();
}











