Intro to Game Physics with Box2D Chapter 2 Part 1

Preview:

DESCRIPTION

Lecture notes for Chapter 2 (Part 1) of Ian Parberry's "Introduction to Game Physics with Box2D", AK Peters, 2013.

Citation preview

Introduction to Game Physics with Box2D

2. Mathematics for Game PhysicsLecture 2.1: Basic Math

Ian ParberryDept. of Computer Science & Engineering

University of North Texas

Introduction to Game Physics with Box2D 2

Contents of This Lecture

1. Geometry2. Vectors3. Orientation

Chapter 2

Introduction to Game Physics with Box2D 3

René Descartes

• 1596 – 1650, French philosopher, physicist, physiologist, & mathematician.

• Famous for (among other things) recognizing that linear algebra and geometry are the same thing.

• Particularly useful for us, because the CPU does linear algebra and what we see on the screen is geometry.

Chapter 2

Introduction to Game Physics with Box2D 4Chapter 2

Geometry

Introduction to Game Physics with Box2D 5Chapter 2

Theorem of Pythagoras

Pythagorean Identity

Vector Magnitude

Law of Cosines

Ball to Ball Collision

Vector Dot Product

Quadratic Equations

Ball to Wall Collision

Ball to Line Collision

2.1.3

2.1.3

2.1.3

2.1.3

2.1.42.2.2

2.2.2 2.2.1

2.2.3

2.1.4

Vector Orientation

3-7

3,4

6,8

3,4

4, 5, 8

Chapters Chapters

Chapters

Chapters

Chapters

Introduction to Game Physics with Box2D 6

Things You Might Remember From School

1. Finding roots of quadratic equations. The function when

2. Trigonometric functions.

Chapter 2

Introduction to Game Physics with Box2D 7

Trig Functions

Chapter 2

h

𝜃𝑎

𝑜

Introduction to Game Physics with Box2D 8

Mnemonics

1. Sohcahtoa2. Some Old Horse Caught Another Horse

Taking Oats Away.3. Some Old Hippy Caught Another Hippy

Toking On Acid.

Chapter 2

Introduction to Game Physics with Box2D 9

Theorem of Pythagoras

𝑎2+𝑏2=𝑐2Chapter 2

𝑐

𝑎

𝑏

Introduction to Game Physics with Box2D 10

Proof of the Theorem of Pythagoras

Chapter 2

𝑏𝑎𝑏

𝑎 𝑎

𝑎 𝑏

𝑏

𝑎𝑏

𝑎

𝑏

𝑐

𝑐 𝑐𝑐

𝑐𝑐

Introduction to Game Physics with Box2D 11

Pythagorean Identity

Chapter 2

1

𝜃cos𝜃sin𝜃

sin2𝜃  +cos2𝜃=1

Introduction to Game Physics with Box2D 12

Law of Cosines

Chapter 2

Introduction to Game Physics with Box2D 13

Proof of the Law of Cosines

Chapter 2

𝐵

𝐶

𝑐sin

𝛼

𝑐 cos𝛼𝐷𝛼

𝑐 𝑎

𝐴

𝐵

𝐶

𝑐sin

𝛼

𝑏−𝑐 cos𝛼𝐷𝛼

𝑎

𝐴

𝑏

Introduction to Game Physics with Box2D 14

More Useful Trig Identities

Chapter 2

Introduction to Game Physics with Box2D 15Chapter 2

Vectors

Introduction to Game Physics with Box2D 16

What’s Our Vector, Victor?

• The Linear Algebra definition of a vector is a list of scalars, typically written with square brackets around them like this [0, 1].

• The dimension of a vector is the number of numbers in the list. For example, [0, 1] has 2 dimensions and [0, 3, 42] has 3 dimensions.

• We mostly use 2-dimensional vectors here because that’s enough to describe 2D space.

• Notation: .Chapter 2

Introduction to Game Physics with Box2D 17

Programming Vectors

• Vectors correspond very naturally to an array in most programming languages.

• D3DX has a structure D3DXVECTOR2 that we will use to implement 2D vectors in code.

• A D3DXVECTOR2 v has two floating point fields v.x and v.y.

Chapter 2

Introduction to Game Physics with Box2D 18Chapter 2

Geometric definition of the vector .

3D Math Primer for Graphics & Game Dev 19

Vector Multiplication by a Scalar

• Result is a vector of the same dimension.• To multiply a vector by a scalar, multiply each

component by the scalar.• For example, .• Vector negation is the same as multiplying by the

scalar –1.• Division by a scalar same as multiplication by the

scalar multiplicative inverse.• That’s the linear algebra definition. The geometry

definition is that a scalar multiplication by stretches a vector by a factor of .

Chapter 2 Notes

3D Math Primer for Graphics & Game Dev 20

Vector Addition: Algebra

• Can add two vectors of the same dimension.• Result is a vector of the same dimension.• To add two vectors, add their components.• For example, • Subtract vectors by adding the negative of the

second vector.

Chapter 2 Notes

Introduction to Game Physics with Box2D 21Chapter 2

Vector Addition: Geometry

+¿ =𝑣�⃗�

�⃗�+ �⃗�

− =𝑣�⃗�

�⃗�−𝑣�⃗�

�⃗�𝑣

𝑣

Introduction to Game Physics with Box2D 22

Vector Addition in Code

D3DXVECTOR2 u, v, w;v = D3DXVECTOR2(3.1415f, 7.0f);u = 42.0f * v;w = u + D3DXVECTOR2(v.x, 9.0f);u += w;

Chapter 2

Introduction to Game Physics with Box2D 23

Vector Magnitude

By the Theorem of Pythagoras, the length of vector , denoted , is .

Chapter 2

√𝑎2 +𝑏

2

𝑎

𝑏

𝑣

Introduction to Game Physics with Box2D 24

Vector Normalization

• A vector is described as being normalized if it has length 1.

• A normalized vector is usually written with a circumflex over it, like this: .

• To normalize a vector simply do a scalar division by its magnitude.

Chapter 2

Introduction to Game Physics with Box2D 25

Vector Magnitude in Code

• D3DXVec2Normalize normalizes a D3DXVECTOR2, that is, makes its length 1.

• D3DXVec2Length computes the length of a D3DXVECTOR2. – Square roots are expensive. – Often it is just as easy to work with squares of

vector lengths as with lengths. – If so, use the faster D3DXVec2LengthSq

function instead of D3DXVec2Length.

Chapter 2

Introduction to Game Physics with Box2D 26Chapter 2

Orientation

Introduction to Game Physics with Box2D 27

Relative Orientation

Given two vectors and , the orientation from to is the angle in the range to that must be rotated counterclockwise to make it parallel to and pointing in the same direction as .

Chapter 2

𝑣

𝛽

�⃗�

The orientation from to here is .

Introduction to Game Physics with Box2D 28

Orientation

The orientation of a single vector is defined to be the orientation from to .

Chapter 2

𝑣

𝛽

The orientation of here is .

Introduction to Game Physics with Box2D 29

Length & Orientation to Vector

Find the vector of length 1 and orientation .

Chapter 2

1

𝜃cos𝜃

sin𝜃

𝑣

1

𝜃

𝑣

𝑣=[cos𝜃 , sin 𝜃 ]

Step 1.

Step 2. Step 3.

Introduction to Game Physics with Box2D 30

Vector to Orientation

Find the orientation of .

Chapter 2

𝑣=[𝑎 ,𝑏 ]

𝜃

1

𝑎

𝑏

Step 1.

Step 2.

Step 3.

Introduction to Game Physics with Box2D 31

A Gotcha

C++ has a function arctan, but it is only good in the first quadrant.

Orientation of Orientation of

Answer: use atan2(a,b) instead.

Chapter 2

Introduction to Game Physics with Box2D 32

Rotating a Vector

Find the vector that results from rotating vector by angle .

Chapter 2

�̂�

𝛽

�̂�=[𝑢𝑥 ,𝑢𝑦 ]

Introduction to Game Physics with Box2D 33

Rotating a Vector

is the vector that results from rotating vector by angle , where is the orientation of .

Chapter 2

𝛼

�̂�

𝛽

�̂�=[𝑢𝑥 ,𝑢𝑦 ]

[1,0]

Introduction to Game Physics with Box2D 34

Rotating a Vector

Therefore, and

Chapter 2

𝛼

�̂�

𝛽

�̂�=[𝑢𝑥 ,𝑢𝑦 ]

[1,0]

Introduction to Game Physics with Box2D 35Chapter 2

void Rotate(const D3DXVECTOR2& u, D3DXVECTOR2& v, float beta){ float alpha = atan2(u.y, u.x); v.x = cos(alpha + beta); v.y = sin(alpha + beta);} //Rotate

This works but we can do better. The atan2 can be optimized out.

Vector Rotation Code

Introduction to Game Physics with Box2D 36

Optimizing the Rotation Code

Since , ,and similarly .

From Appendix A (and an earlier slide),

Therefore,

From Appendix A,

Therefore,Chapter 2

Introduction to Game Physics with Box2D 37

Optimized Vector Rotation Code

Chapter 2

void Rotate(const D3DXVECTOR2& u, D3DXVECTOR2& v, float beta){ v.x = u.x * cos(beta) - u.y * sin(beta); v.y = u.x * sin(beta) + u.y * cos(beta);} //Rotate

We’ve replaced an arctangent with four floating point multiplications, which is faster in practice.

Introduction to Game Physics with Box2D 38Chapter 2

Conclusion

Introduction to Game Physics with Box2D 39

Suggested ReadingSection 2.1

Chapter 2

Suggested Activities

Problems 1-4 from Section 2.5.