Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This example introduces a couple of new things starting on line 13:

float radius = dist(mouseX,mouseY,width/2,height/2);

Here the distance from the mouse pointer to the window center centre is determined (see Pythagoras).


radius = map(radius,0,width,1,4);

The original range is from 0 to the width of the window. The target range is from 1-4. Now radius is transformed from original range to the target range.


-atan2(mouseX - (width / 2),mouseY - (height / 2)); 

The atan2 function returns the angle in radians at a given coordinate from the 0 point. In this example we shift the 0 point to the centre of the screen by subtracting width/2 from X and height/2 from Y.

Image Added

Image Credit: wikipedia

Exercise 8

Create a new programme program where a simple car follows the mouse on the screen from left to right. The car should be drawn from the side, and include wheels that rotate. You may use the example code to get started.

...

Code Block
languagejava
int rotation;
void setup()
{
  size(900, 400);      // def. window size
}
 
void draw()
{
  rotation++;
}
 
void car(int x, int y) {
  fill(100);
  beginShape();
  vertex(0, 0);
  vertex(5, -50);
  vertex(50, -50);
  vertex(70, -80);
  vertex(150, -80);
  vertex(190, -50);
  vertex(265, -45);
  vertex(270, 0);
  vertex(0, 0);
  endShape();
  wheel(60, 0);
  wheel(210, 0);
}
 
void wheel(int x, int y) {
  int radius = 25;
  fill(150);
  stroke(0);
  strokeWeight(7);
  ellipse(0, 0, radius*2, radius*2);
  strokeWeight(4);
  line(0-radius, 0, 0+radius, 0);
  line (0, 0-radius, 0, 0+radius);
  noStroke();
}


Possible Solution: 

Code Block
languagejava
titleSolution to exercise
collapsetrue
int rotation;
boolean forward = true;
int xScale = 1;
void setup()
{
  size(900, 400);
}

void draw()
{
  background(255);
  int mouseMovement = mouseX-pmouseX; //pmousex gives us our mouse x value from the last frame. Subtracting from the current position give us the distance moved per frame
  if (mouseMovement<0) { // if the movement is negative, then we flip everthing backwards with a negative xcale
    xScale = -1;
  }
  if (mouseMovement>0) { // if the movement is positive, then our xscale is positive
    xScale = 1;
  }
  rotation+= abs(mouseMovement);
  car(mouseX, height/2);
}

void car(int x, int y) {
  pushMatrix();
      translate(x, y);
      scale(xScale, 1);
      fill(100);
      beginShape();
      vertex(0, 0);
      vertex(5, -50);
      vertex(50, -50);
      vertex(70, -80);
      vertex(150, -80);
      vertex(190, -50);
      vertex(265, -45);
      vertex(270, 0);
      vertex(0, 0);
      endShape();
      wheel(60, 0);
      wheel(210, 0);
  popMatrix();
}

void wheel(int x, int y) {
  int radius = 25;
  fill(0, 100, 0150);
  stroke(0);
  pushMatrix();
  translate(x, y);
  stroke(0rotate(radians(rotation));
  strokeWeight(7);
  ellipse(0, 0, radius*2, radius*2);
  strokeWeight(4);
  line(0-radius, 0, 0+radius, 0);
  line (0, 0-radius, 0, 0+radius);
  noStroke();
  popMatrix();
}