90 likes | 189 Views
Fundamentals of Programming. SM1204 Semester A 2011. Assignment 2. Due date 24 Nov Collection via ACS. Requirements. Design and simulate set of objects (20%) e.g. germs, ants, cars, Use of "for" statements and “array” data structures (20%) With interaction among objects (30%)
E N D
Fundamentals of Programming SM1204 Semester A 2011
Assignment 2 Due date 24 Nov Collection via ACS
Requirements • Design and simulate set of objects (20%) • e.g. germs, ants, cars, • Use of "for" statements and “array” data structures (20%) • With interaction among objects (30%) • Creative object behaviors (30%) • Note that graphic is not important in this assignment
Example • http://processing.org/learning/topics/flocking.html
Example – Simple germs Define and initialization data (arrays) int n = 80; float ballSize = 5; float[] x = new float[n]; float[] y = new float[n]; float[] sx = new float[n]; float[] sy = new float[n]; void setup() { size(200, 200); smooth(); for (inti=0; i<n; i++) { x[i] = random(10, width-10); y[i] = random(10, height-10); sx[i] = random(-1, 1); sy[i] = random(-1, 1); } }
Example – Simple germs How objects move void move() { for (inti=0; i<n; i++) { x[i] += sx[i]; y[i] += sy[i]; if (x[i] < 0) { x[i] = 0; sx[i] = -sx[i]; } if (x[i] > width) { x[i] = width; sx[i] = -sx[i]; } if (y[i] < 0) { y[i] = 0; sy[i] = -sy[i]; } if (y[i] > height) { y[i] = height; sy[i] = -sy[i];} } }
Example – Simple germs void draw() { background(200); for (inti=0; i<n; i++) { for (int j=0; j<n; j++) { float d = dist(x[i], y[i], x[j], y[j]); if (d < 30) { float c = map(d, 0, 30, 0, 200); stroke(c); line(x[i], y[i], x[j], y[j]); } } } stroke(0); fill(255); for (inti=0; i<n; i++) { ellipse(x[i], y[i], ballSize, ballSize); } move(); } How objects display
Example – Simple germs How objects interact with each other (insert this to function move() ) for (inti=0; i<n; i++) { for (int j=0; j<n; j++) { if (i != j){ float dx = 1 / (x[i] - x[j]); float dy = 1 / (y[i] - y[j]); dx = constrain(dx, -0.9, +0.9); dy = constrain(dy, -0.9, +0.9); sx[i] += dx; sy[i] += dy; sx[i] = constrain(sx[i], -3, +3); sy[i] = constrain(sy[i], -3, +3); } } }
Useful Functions & References • map (value, low1, high1, low2, high2) • Re-maps a number from one range to another • constrain(value, min, max) • Constrains a value to not exceed a maximum and minimum value. • abs(value) • Calculates the absolute value (always position) of a number.