developing an educational rigid body dynamics physics engine by neal milstein

17
Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Upload: shonda-berenice-miller

Post on 19-Jan-2016

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Developing An Educational Rigid Body

Dynamics Physics Engine

By Neal Milstein

Page 2: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Abstract

• Goal of Project: To create a rigid-body dynamics physics engine in order to allow physics students to visualize and solve physics models.

• Rigid-body dynamics: The study of the motion of non- deformable, free-moving bodies through space.

Page 3: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Abstract (continued)

• Engine

• Focus on accuracy and speed

• Algorithms Used: Runge-Kutta 4, Separate Axis Theorem, collision response

• Interface

• Focus on education, straightforwardness, and free flow

Page 4: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Introduction

• Proper visualization of physical models required to properly understand physics concepts.

• Computers are used because they replace real-life simulations and have less error margin

• My project: simulates rigid bodies and their interactions in two-dimensional space

Page 5: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Micro vs. Macro

• Physics engines – Present the unique problem of combining small-scale physical rigid-body oriented interactions with large-scale physics engine design

• Micro – Small-scale interactions, algorithms, and designs. e.g. Separate Axis Theorem, Hooke’s Law

• Macro – Large-scale design paradigms, architectural patterns. e.g. model-view-controller, separation of interactions from graphics.

Page 6: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Background - Separating Axis Theorem

• A line can always be drawn between two concave non-intersecting bodies

• What this means: objects are colliding if and only if all separating axes are colliding

Page 7: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Background – Runge-Kutta 4 Integration

• Uses weighted average of past slope measurements to estimate h, the best slope estimate for the differential equation at the given time interval.

• Much more accurate then Euler’s method, especially over large time step.

• Can be used in combination with optimization techniques to calculate differential over many objects.

Page 8: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Development – Model-View-Controller

• Separated into Model, View, and Controller (MVC design)

• Model - Storage structure for physical components. Includes ways components are grouped and their connections with each other.

• View - GUI to which components are displayed. Reads component models and outputs them to screen. Includes User Interface

• Controller - Manipulates Models and prepares them for the view. Includes physics engine and physical interactions between models.

Page 9: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Development – First step: Model

• Model, underlying structure of physical objects, was developed first.

• Made up of classes that store information, with not too many functional methods (by design)

Page 10: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Example of a Model Class

package model;

public abstract class Body extends Element implements Referenceable, Massable, Anchorable, Collideable{ protected Reference reference; protected double mass; protected boolean isAnchored; private boolean colliding = false;

public Body(Reference reference, double mass) { this.reference = reference; this.mass = mass; isAnchored = false; } public Body(Reference reference, double mass, boolean isAnchored) { this.reference = reference; this.mass = mass; this.isAnchored = isAnchored; } public void addForce(double forceMag, Vector direction) { double acceleration = forceMag / mass; this.getReference().addAcceleration(new Vector(acceleration, direction)); } /* ... */}

Page 11: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Development – Controller Implementation

• Increases time step

• Cycles through Interacter objects and calls their interact() method

• Passes the model as an argument to the Graphical User Interface

• Some current Interacters:

• CollisionInteracter (Separating Axis Theorem)

• SpringInteracter (Hooke’s Law)

• ReferenceableInteracter (Runge-Kutta 4)

Page 12: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Example of an Interacter Class

public class SpringInteracter extends Interacter{ public SpringInteracter(Model model) { super(model); } public void interact() { for (Element e : model) { if (e instanceof Spring) { Spring s = (Spring)e; double forceMag = s.getForce(); Vector direction = s.getBodyA().getReference().getPosition().minus(s.getBodyB().getReference().getPosition()); s.getBodyA().addForce(forceMag, direction); s.getBodyB().addForce(forceMag, direction.getNegative()); } } }}

Page 13: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Development - View

• Graphical User Interface

• View.render(Model model) method called every time step

• View draws the model to the screen

• Also contains interface buttons that feed commands back to the controller

Page 14: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Results

• Easily create new simulations just by drawing the objects to the GUI or programmatically defining them

• Demonstrated Conservation of Energy – Center of Mass always in center of screen.

Page 15: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Functionality• Detect Collisions via the Separate Axis

Theorem – collision response (dynamics) on the way

• Simulate tension interactions with Hooke’s Law

• 2-D motion accurate due to Runge-Kutta 4

• Draw Bodies on screen, have them connected with springs

• Simulate any number of bodies in any configuration

Page 16: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Testing Results

• Online models of predefined physics problems

• Physics textbook problems that can be solved by hand

• Testing Conservation of Energy or Momentum

Page 17: Developing An Educational Rigid Body Dynamics Physics Engine By Neal Milstein

Conclusions

• If properly modularized, physics engines can be expandable and scalable.

• Key is in separation of programming areas (model from view from controller)

• Many physics formulas take new forms in computers.