第二天 连接点第二部分
今天的例子和昨天的类似,只不过我们将使用随机点代替固定点,连接点的时候也将采用不同的方式。如果两点之间的距离小于某一个我们定义的数,我们就把这两个点连接起来。并且将连线的透明度与两点距离相关联,距离越大,连线就越透明。
我们用 dist()函数来计算两个点之间的距离。前两个参数是第一个点的x座标和y座标。第三,第四个参数是另外一个点的x座标和y座标。返回值为一个float类型的数值,代表两点之间的距离。如果距离小于255,我们就在这两点之间连线。
float dst = dist( points<i>.x, points<i>.y, points[j].x,points[j].y ); if ( dst < 255 ) { stroke( 255, 255 - dst ); line( points<i>.x, points<i>.y, points[j].x, points[j].y ); }
画完这些细线之后,我们稍微放大点的体量,这样会让图像更好看。以下这些代码将加入到第一个for-loop循环的结尾、内部循环之后。
stroke( 255 ); strokeWeight(4); point( points<i>.x, points<i>.y ); 源码:
int numPoints = 10;
PVector [] points = new PVector[numPoints];void setup()
{
size(450,400);
for(int i=0;i<numPoints;i++)
{
points[i]=new PVector(random(width),random(height));
}
noLoop();
}void draw()
{
smooth();
background(0);
noFill();
for(int i=0;i<numPoints;i++){
for(int j=0;j<numPoints;j++)
{
strokeWeight(1);
if(j!=i) {
float dst = dist(points[i].x,points[j].y,points[j].x,points[j].y);
if(dst<255) {
stroke(255,255-dst);
line(points[i].x,points[i].y,points[j].x,points[j].y);
}
}
}
stroke(255);
strokeWeight(4);
point(points[i].x,points[i].y); //节点画点
}
saveFrame("images/random-connections-"+numPoints+".png");
}
成果