int numPeople = 32;
PFont h;
//These arrays will store the age, name and response data from 3 txt files (in the data folder)
String[] ages;
String[] responses;
String[] enviros;
String[] genres;
Person[] people = new Person[numPeople];
void setup()
{
size(800, 800);
smooth();
h = loadFont("Helvetica-10.vlw");
textFont(h);
noLoop();
//I moved this to a function to "clean up" the setup a bit. Makes it easier to read...
initializePeople();
println(numPeople);
}
void draw()
{
background(255);
//A loop to display and update all Person objects.
for (int i=0; i<numPeople; i++)
{
//Display and check against mouse. This only needs to happen once for every Person.
people[i].display();
}
fill(0, 150);
//text("hover over arc to see response", 40, 40);
text("<17", width/2, height/2+80);
text("25", width/2, height/2+140);
text("35", width/2, height/2+200);
text("50", width/2, height/2+270);
text("65<", width/2, height/2+330);
}
void initializePeople()
{
//Use loadStrings to load each text file into an array. Cast each array to the appropriate data type too.
ages = loadStrings("age32.txt");
responses = loadStrings("response32.txt");
enviros = loadStrings("enviro32.txt");
genres = loadStrings("genre32.txt");
/*
names[n], ages[n] and answers[n] correspond with one person's data, soooo we'll pass those three values
into a Person object, which will keep track of them, and keep them together. Each person object now
represents one of our interviewees. We could then visualize a person as a bar, ellipse, point, scaled svg...
Whatever you imagine doing with people's data, you can now do!
*/
for (int i=0; i<numPeople; i++)
{
//Construct a new person (32 times). Pass in each row of data from the lists.
people[i] = new Person( int(ages[i]), int(responses[i]), int(enviros[i]), int(genres[i]));
}
}
class Person
{
int age;//age of person responded, radius of arc
int response;//answer to yes/no question, color
int enviro;//urban density, thickness
int genre;//favorite type of movie, quadrant
//String name;
float xpos;
float ypos;
Person(int a, int r, int e, int g)
{
this.xpos = width/2; //centered on sketch
this.ypos = height/2;
this.age= a;
this.response= r;
this.enviro = e;
this.genre = g;
}
/*A display method. Visualizes each person as an ellipse. Age controlls the size. */
void display()
{
noFill();
stroke(255*response, 0, 0,100);
strokeCap(SQUARE);
strokeWeight(int(enviro*10));//urban density variable
float disperse = random(-20,20);
arc(width/2, height/2, 120*age+disperse, 120*age+disperse,(PI/4)*genre, ((PI/4)*genre)+(PI/4));
}
}
Data Visualisation sketch showing responses from 32 people, with red bars representing people who think computers can be more creative than humans.
Distance from center shows age of respondent
strokeweight represents urban density (urban, suburban, rural)
quadrant location represents favorite movie genre