processing 学习第二天笔记

第二天 连接点第二部分

今天的例子和昨天的类似,只不过我们将使用随机点代替固定点,连接点的时候也将采用不同的方式。如果两点之间的距离小于某一个我们定义的数,我们就把这两个点连接起来。并且将连线的透明度与两点距离相关联,距离越大,连线就越透明。

我们用 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");  
}  

成果 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章