第二天 连接点第二部分
今天的例子和昨天的类似,只不过我们将使用随机点代替固定点,连接点的时候也将采用不同的方式。如果两点之间的距离小于某一个我们定义的数,我们就把这两个点连接起来。并且将连线的透明度与两点距离相关联,距离越大,连线就越透明。
我们用 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"); }
成果