<< Chapter < Page Chapter >> Page >

What does the following code fragment print out? int[] a = new int[10]; a[7]= 7; int[]b = a; println(b[7]); b[7]= 8; println(a[7]); int c = 7;int d = c; println(d);d = 8; println(c);

7 87 7

Got questions? Get instant answers now!

The following sketch generates a set of 100 moving circles and draws all chords linking theintersection points of all couples of intersecting circles. /* Structure 3 A surface filled with one hundred medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles B. The aggregate intersections of the circles Implemented by Casey Reas <http://groupc.net> 8 March 2004 Processing v.68 <http://processing.org> modified by Pietro Polotti 28 March, 2006 Processing v.107 <http://processing.org> */ int numCircle = 100; Circle[] circles = new Circle[numCircle]; void setup() { size(800, 600); frameRate(50); for(int i=0; i<numCircle; i++) { circles[i] = new Circle(random(width), (float)height/(float)numCircle * i, int(random(2, 6))*10, random(-0.25, 0.25), random(-0.25, 0.25), i); } ellipseMode(CENTER_RADIUS); background(255); } void draw() { background(255); stroke(0); for(int i=0; i<numCircle; i++) { circles[i].update(); } for(int i=0; i<numCircle; i++) { circles[i].move(); } for(int i=0; i<numCircle; i++) { circles[i].makepoint(); } noFill(); } class Circle { float x, y, r, r2, sp, ysp; int id; Circle( float px, float py, float pr, float psp, float pysp, int pid ) { x = px; y = py; r = pr; r2 = r*r; id = pid; sp = psp; ysp = pysp; } void update() { for(int i=0; i<numCircle; i++) { if(i != id) { intersect( this, circles[i] ); } } } void makepoint() { stroke(0); point(x, y); } void move() { x += sp; y += ysp; if(sp > 0) { if(x > width+r) { x = -r; } } else { if(x < -r) { x = width+r; } } if(ysp > 0) { if(y > height+r) { y = -r; } } else { if(y < -r) { y = height+r; } } } } void intersect( Circle cA, Circle cB ) { float dx = cA.x - cB.x; float dy = cA.y - cB.y; float d2 = dx*dx + dy*dy; float d = sqrt( d2 ); if ( d>cA.r+cB.r || d<abs(cA.r-cB.r) ) { return; // no solution } // calculate the two intersections between the two circles cA and cB, // // whose coordinates are (paX, paY) and (pbX, pbY), respectively. // stroke(255-dist(paX, paY, pbX, pbY)*4); line(paX, paY, pbX, pbY); }

  • Complete the missing part that is expected to compute the intersections of the circles, in such away to draw the chords linking the intersection points. It is possible to use the computation ofintersection coordinates in a ad-hoc reference system ( “Circle-Circle Intersection” ), then converting the result into the Processing window coordinatesystem.
  • Make the chords time-variable by giving different speeds to differentcircles.

/* Structure 3 A surface filled with one hundred medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles B. The aggregate intersections of the circles Implemented by Casey Reas <http://groupc.net> 8 March 2004 Processing v.68 <http://processing.org> modified by Pietro Polotti 28 March, 2006 Processing v.107 <http://processing.org> */ int numCircle = 100; Circle[] circles = new Circle[numCircle]; void setup() { size(800, 600); frameRate(50); for(int i=0; i<numCircle; i++) { circles[i] = new Circle(random(width), (float)height/(float)numCircle * i, int(random(2, 6))*10, random(-0.25, 0.25), random(-0.25, 0.25), i); } ellipseMode(CENTER_RADIUS); background(255); } void draw() { background(255); stroke(0); for(int i=0; i<numCircle; i++) { circles[i].update(); } for(int i=0; i<numCircle; i++) { circles[i].move(); } for(int i=0; i<numCircle; i++) { circles[i].makepoint(); } noFill(); } class Circle { float x, y, r, r2, sp, ysp; int id; Circle( float px, float py, float pr, float psp, float pysp, int pid ) { x = px; y = py; r = pr; r2 = r*r; id = pid; sp = psp; ysp = pysp; } void update() { for(int i=0; i<numCircle; i++) { if(i != id) { intersect( this, circles[i] ); } } } void makepoint() { stroke(0); point(x, y); } void move() { x += sp; y += ysp; if(sp > 0) { if(x > width+r) { x = -r; } } else { if(x < -r) { x = width+r; } } if(ysp > 0) { if(y > height+r) { y = -r; } } else { if(y < -r) { y = height+r; } } } } void intersect( Circle cA, Circle cB ) { float dx = cA.x - cB.x; float dy = cA.y - cB.y; float d2 = dx*dx + dy*dy; float d = sqrt( d2 ); if ( d>cA.r+cB.r || d<abs(cA.r-cB.r) ) { return; // no solution } float a = (cA.r2 - cB.r2 + d2) / (2*d); float h = sqrt( cA.r2 - a*a ); float x2 = cA.x + a*(cB.x - cA.x)/d; float y2 = cA.y + a*(cB.y - cA.y)/d; float paX = x2 + h*(cB.y - cA.y)/d; float paY = y2 - h*(cB.x - cA.x)/d; float pbX = x2 - h*(cB.y - cA.y)/d; float pbY = y2 + h*(cB.x - cA.x)/d; stroke(255-dist(paX, paY, pbX, pbY)*4); line(paX, paY, pbX, pbY); }

Got questions? Get instant answers now!

Make the sketch of interactive. For example, make the circle displacement dependent on the horizontal positionof the mouse.

/* Structure 3 A surface filled with one hundred medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles B. The aggregate intersections of the circles Implemented by Casey Reas <http://groupc.net> 8 March 2004 Processing v.68 <http://processing.org> modified by Pietro Polotti 28 March, 2006 Processing v.107 <http://processing.org> */ int numCircle = 100; Circle[] circles = new Circle[numCircle]; void setup() { size(800, 600); frameRate(50); for(int i=0; i<numCircle; i++) { circles[i] = new Circle(random(width), (float)height/(float)numCircle * i, int(random(2, 6))*10, random(-0.25, 0.25), random(-0.25, 0.25), i); } ellipseMode(CENTER_RADIUS); background(255); } void draw() { background(255); stroke(0); if(mousePressed){ for(int i=0; i<numCircle; i++) { circles[i].sp = mouseX*random(-5, 5)/width; } } for(int i=0; i<numCircle; i++) { circles[i].update(); } for(int i=0; i<numCircle; i++) { circles[i].move(); } for(int i=0; i<numCircle; i++) { circles[i].makepoint(); } noFill(); } class Circle { float x, y, r, r2, sp, ysp; int id; Circle( float px, float py, float pr, float psp, float pysp, int pid ) { x = px; y = py; r = pr; r2 = r*r; id = pid; sp = psp; ysp = pysp; } void update() { for(int i=0; i<numCircle; i++) { if(i != id) { intersect( this, circles[i] ); } } } void makepoint() { stroke(0); point(x, y); } void move() { x += sp; y += ysp; if(sp > 0) { if(x > width+r) { x = -r; } } else { if(x < -r) { x = width+r; } } if(ysp > 0) { if(y > height+r) { y = -r; } } else { if(y < -r) { y = height+r; } } } } void intersect( Circle cA, Circle cB ) { float dx = cA.x - cB.x; float dy = cA.y - cB.y; float d2 = dx*dx + dy*dy; float d = sqrt( d2 ); if ( d>cA.r+cB.r || d<abs(cA.r-cB.r) ) { return; // no solution } float a = (cA.r2 - cB.r2 + d2) / (2*d); float h = sqrt( cA.r2 - a*a ); float x2 = cA.x + a*(cB.x - cA.x)/d; float y2 = cA.y + a*(cB.y - cA.y)/d; float paX = x2 + h*(cB.y - cA.y)/d; float paY = y2 - h*(cB.x - cA.x)/d; float pbX = x2 - h*(cB.y - cA.y)/d; float pbY = y2 + h*(cB.x - cA.x)/d; stroke(255-dist(paX, paY, pbX, pbY)*4); line(paX, paY, pbX, pbY); }

Got questions? Get instant answers now!

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Media processing in processing. OpenStax CNX. Nov 10, 2010 Download for free at http://cnx.org/content/col10268/1.14
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Media processing in processing' conversation and receive update notifications?

Ask