วันพุธที่ 1 ตุลาคม พ.ศ. 2557

Histogram (Bar char) in Array & Loop & Function


int [] bar_tableX = {
  20, 80, 140, 200, 260, 320, 380, 440
};
int [] value = {
  200, 150, 30, 75, 100, 180, 55, 130
};

void setup() {
  size(500, 500);
}

void draw() {
  background(255);
  fill (102, 0, 153);
  textSize(25);
  text ("Histogram", (width/2)-50, 40);
  bar(bar_tableX, value);
  Detail_Of_Bar(bar_tableX, value);
}


void bar(int [] a, int [] b)
{
  for (int i=0; i<a.length; i++)
  {
    if (b[i]==max(b))
    {
      fill(225, 0, 51);
    }
    if (b[i]==min(b))
    {
      fill(153, 250, 0);
    }
    if (b[i]!=max(b)&&b[i]!=min(b))
    {
      fill(255, 255, 0);
    }
    noStroke();
    rect(a[i], 310, 40, (-b[i]));
    stroke(51, 0, 0);
    strokeWeight (2);
  }
}

void Detail_Of_Bar(int [] a, int [] b)
{
  float avg = 0;
  float Total=0;
  float count = 0;
  //draw  grid
  line(a[0]-10, -max(b)+270, a[0]-10, 315);
  fill(51, 0, 0);
  textSize(15);
  text("y", a[0]-10, -max(b)+260);
  line(a[0]-10, 315, max(a)+50, 315);
  text("x", max(a)+40, 330);

  for (int i=0; i<a.length; i++)
  {
    //caculate Sum
    text(b[i], a[i], 335);
    float Sum = b[i] ;
    Total = Total+Sum;
    count++;
  }
  //calculate Avg.
  avg = Total/count;
  stroke(0, 51, 204);
  strokeWeight (1);
  line (30, 315-avg, 490, 315-avg);
  //show average bar
  fill (0, 0, 255);
  text ((avg), (width/2)-20, (310-avg));
 
  //show detail
  noStroke ();
  text(" Max = "+max(b), (width/2)-30, 400);
  fill(225, 0, 51);
  rect((width/2)-60, 385, 15, 15);

  fill(51, 0, 0);
  text(" Min = "+min(b), (width/2)-30, 420);
  fill(153, 250, 0);
  rect((width/2)-60, 405, 15, 15);

  fill(51, 0, 0);
  text(" Average = "+avg, (width/2)-30, 440);
  fill(0, 51, 204);
  rect((width/2)-60, 425, 15, 15);
}

void mousePressed()
{
  for (int i=0; i<bar_tableX.length; i++)
  {
    if (mouseButton==LEFT&&mouseX>=bar_tableX[i]&&mouseX<=(bar_tableX[i]+40))
    {
      value[i]=int(random(210));
    }
  }
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น