Examples

Accelerometer

Using the MacBook Accelerometer, you can interact with gravity. This is made by using the excellent Daniel Shiffman SMS Library. ONLY WORKS ON MACBOOKs AND MACBOOK PROs. LOCAL ONLY. Try it yourself!

Applet

Not available.

Code

//Import all Phys2D libraries
import pphys2d.bodies.*;
import pphys2d.joints.*;
import pphys2d.shapes.*;
import pphys2d.phys2d.raw.collide.*;
import pphys2d.phys2d.raw.strategies.*;
import pphys2d.phys2d.raw.forcesource.*;
import pphys2d.phys2d.util.*;
import pphys2d.phys2d.raw.shapes.*;
import pphys2d.*;
import pphys2d.phys2d.raw.*;
import pphys2d.phys2d.math.*;
import sms.*;

//Create a PPhys2D world
PPWorld world = new PPWorld();

//Create circle array
PPCircle[] balls = new PPCircle[8];

//Gravity value
float theta = 1.5;

void setup () {

  //Set size and framerate
  frameRate(50);
  size(500,500);

  //Set a standard world gravity
  world.setGravity(0, 0);
  world.setEdges(this, new Color (40, 40, 40));

  //Create balls
  for(int i=0; i <8; i++) {    
    balls[i] = new PPCircle(random(20,50));
    balls[i].setFillColor(new Color((int)random(100,140), (int)random(100,140), (int)random(100,140)));
    balls[i].setStrokeColor(new Color(190,190,190));
    balls[i].setStrokeWidth(3);   
    balls[i].setPosition(random(150,350), random(150,350));
    world.add(balls[i]);
  }
}

void draw() {
  //Clear
  background(10); 

  //Refresh gravity force
  float factor = 0.5;
  int[] vals = Unimotion.getSMSArray();  
  float x = vals[0]*-factor;
  float y = vals[1]*factor;
  world.setGravity(x,y);

  //Draw a line representing gravity force
  line(250,250, x+250, y+250);
  ellipseMode(CENTER);
  fill(255);
  ellipse(250,250, 10,10);

  //Draw PPhys2D world
  world.draw(this);
}