Yado_tech

旅館+ITとはなんぞ

BNNのprocessing本のようなアウトプットをいい感じに作る

Processing:ビジュアルデザイナーとアーティストのためのプログラミング入門

Processing:ビジュアルデザイナーとアーティストのためのプログラミング入門

これみたいなやつをいい感じに作りたい。

なお、この本は高すぎるので買わない。

任意の点から1番目と2番目に近い点を探すのにどうしようかと思ってたけど力技で解決しようと思う。

任意の点から全ての点の距離を求める→ソートする→そこから一番短い距離を2つ求める→それの距離にある点をもう一度探す

という感じで探す。

int NUM = 1000;
PVector[] vectors = new PVector[NUM];
void setup(){
  size(800,800);
  smooth();
  for(int i = 0; i <NUM ; i++){
    float w = random(width);
    float h = random(height);
    vectors[i] = new PVector(w,h);
  }
}

void draw(){
  background(30);
  stroke(200,250,255,50);
  strokeWeight(2);
  nns();
}

void nns(){
    for(int j = 0; j<vectors.length;j++){
    float[] distances = new float[vectors.length-1];
    for(int i = 0;i<vectors.length-1;i++){
      distances[i] = dist(vectors[j].x,vectors[j].y,vectors[i].x,vectors[i].y);
    }
    distances = sort(distances);
    float saitan1 = distances[1];
    
    float saitan2 = distances[2];
    
    for(int i = 0; i<vectors.length-1;i++){
      if(dist(vectors[j].x,vectors[j].y,vectors[i].x,vectors[i].y) == saitan1){
        line(vectors[j].x,vectors[j].y,vectors[i].x,vectors[i].y);
      }
    }
    for(int i = 0; i<vectors.length-1;i++){
      if(dist(vectors[j].x,vectors[j].y,vectors[i].x,vectors[i].y) == saitan2){
        line(vectors[j].x,vectors[j].y,vectors[i].x,vectors[i].y);
      }
    }
  }
}
  • 詰まったところ・・・最短距離は自身から自身までのゼロが最短だったので最短から1個2個のところを探さなくてはいけなかった

出力結果

f:id:devilmakelie:20171104205420p:plain

なんか違う・・