410 likes | 560 Views
Math / Physics 101. GAM 376 Robin Burke Winter 2008. Homework #1. Use my code not Buckland’s web site Visual Studio Express see DL’s comments ( col site). Discussion site. any course-related topic. Begin math / physics 101. If you’ve taken GAM 350 or any other kind of physics
E N D
Math / Physics 101 GAM 376 Robin Burke Winter 2008
Homework #1 • Use my code not Buckland’s web site • Visual Studio Express • see DL’s comments (col site)
Discussion site • any course-related topic
Begin math / physics 101 • If you’ve taken GAM 350 • or any other kind of physics • mostly review • Vectors • Coordinate spaces • Kinematics
Why physics? • What does physics have to do with AI? • Game characters • must react to the world and its physics • must make predictions about what will happen next • must take actions that depend on the world’s physical properties
Why physics? • This is the most fundamental form of “avoiding stupidity” • Game characters • should act as though they understand the physical world of the game • will often be blind to other aspects of the game
Vector • A multi-dimensional quantity • represented by a tuple of numbers • We will deal mostly with 2-D vectors • <2, 5> • 3-D vectors are more mathematically complex • but not fundamentally different • for AI purposes
Vectors • can represent positions • <1,1> is a position 1 unit north and 1 unit east of the origin • can also represent velocities • <3,-4> is a speed of 5 units in a northwesterly direction • other quantities • orientation, acceleration, angle, etc.
Vector operations • Magnitude • v = <x1, y1> • | v | = magnitude(v) = sqrt(x12+y12) • the length of the vector • Adding • <x1, y1> + <x2, y2> = <x1+x2, y1+y2> • Scalar multiplication • <x1, y1> * z = <x1*z, y1*z> • changes only the length • Normalization • v / |v| • makes a vector of length 1 • does not change the orientation of the vector
More vector operations • dot product • <x1, y1> ● <x2, y2> = • x1 * x2 + y1 *y2 • scalar quantity • related to the angle between vectors • cos (angle) = u ● v / | u | | v | • Note • if u and v are normalized (length = 1) • then u ● v is the cosine of the angle between them
Example • we have two agents: a, b • each has a vector position • and a normalized vector orientation • the direction they are facing • turn to face an enemy • agent: Pa, Oa • enemy: Pb, Ob • vector from agent to enemy • Pba = Pb-Pa • normalize it • compute dot product • norm(Pba) ●Oa • compute inverse cosine • this is the angle to turn
Turn to face cos-1(Oa • norm(Pb-Pa)) Pa Pb-Pa Pb
Normal vectors • A normal vector is orthogonal to another vector • in 2 dimensions = 90 degrees • n● v = 0
Coordinate transformations • We will always want to move back and forth between coordinate systems • objects each have their own local coordinate systems • related to each other in "world space" • Example • NPC • a character is at a particular position, facing a particular direction • he defines a coordinate system • Door • the door has its own coordinate system • in that system, the handle is in a particular spot • To make the character reach for the handle • we have to make the two coordinate systems interact
Transformations • We know • where the handle is in door space • where the agent's hand is in agent space • what is the vector in agent space • Set of transformations • transform handle location L0 to world space Lw • transform handle location to agent space La • Each transformation • is a translation (changing the origin) • and a rotation changing the orientation
Affine transformations • Usually coordinate transformations are done through matrix multiplications • we multiply a vector by a matrix and get another vector out • The curious thing is • that to do this we have to use vectors and matrices one size larger than our current number of dimensions • you will see <x, y, 1> as the representation of 2-D vector and <x,y,z,1> for 3-D
Matrix math • 2-D dimensional array • Matrix multiplication • F x G • dot product of • rows of F • columns of G • corrolary • multiplication only works • if cols of F = rows of G
Matrix math • Can also multiply a vector times a matrix • v x M • Result • a new vector • each entry • a dot product of v with a different row of M • length of v • must equal number of cols in M
Example • rotation around the origin by angle θ • matrix • multiply by current vector • <1, 1> becomes <1, 1, 1> • answer • x = cos(θ) – sin (θ) + 0 • y = sin(θ) + cos(θ) + 0 • z = 1
x' = x cos(θ) – y sin(θ) • y' = x sin(θ) + y cos(θ) (2.12, 0.70) (1, 2) θ = -π / 4
Translation • Achieved by adding values at the ends of the top two rows • This rotates and translates by (3, -4)
Efficiency • Mathematical operations are expensive • especially trigonometric ones (inverse cosine) • also square root • multiplication and division, too • Normalization is particularly expensive • square root, squaring and division • We want to consider ways to make our calculations faster • especially if we are doing them a lot
Squared space • We can do calculations in "squared space" • never have to do square roots • Example • test whether one vector is longer than another • sqrt(X12+Y12) > sqrt(X22+Y22) • X12+Y12 > X22+Y22 • both will give the same result
Kinematics • the physics of motion • we worry about this a lot in computer games • moving through space, collisions, etc. • our NPCs have to understand this too in order to avoid stupidity
Basic kinematics • position • a vector in space • (point position) • for a large object we use a convenient point • classically the center of mass • velocity • the change of position over time • expressed as a vector • pt+1 = pt + vΔt • if we define the time interval Δt to be 1 • we avoid a multiplication
Basic kinematics II • Acceleration • change in velocity over time • also expressed as a vector • vt+1 = vt + a Δt • Pair of difference equations
Numerical methods • We want to run a simulation that shows what happens • But now we have a problem • there is a lag of 1 time step before acceleration impacts position • not physically accurate • Example • deceleration to stop • t = 0, d = 0, v = 10, a = 0 • t = 1, d = 10, v = 10, a = -5 • t = 2, d = 20, v = 5, a = -5 • t = 3, d = 25, v = 0, a = 0 • Correct distance traveled • Δd = v0Δt + ½ a Δt 2 • Δd = 10 • d = 20
We can improve our simulation • finer time step (expensive) • improved estimation methods • for example instead of using vt, we can use the average of vt and vt+1 • Example • t=0, d=0, v=10, a =0 • t=1, d=10, v=10, a = -5 • t=2, d=17.5, v=5, a=-5 • t=3, d=20, v=0, a=0 • better • we slow down in the first time step • correct final answer • but only works if acceleration is constant • take GAM 350 for better ways
Another derivation v(t+1) velocity v(t) time
What does this have to do with AI? • Imagine a NPC • he has to decide how hard to throw a grenade • that judgment has to be based on an estimate of the item’s trajectory • When NPC take physical actions • we have to know what the parameters of those actions should be • very often physics calculations are required • not as detailed as the calculations needed to run the game
Approximation in Prediction • NPC will frequently need to predict the future • where will the player be by the time my rocket gets there? • Assumptions • current velocity stays constant • we know the speed of the rocket • Correct way • vector algebra • lots of square roots and trig functions • Typical approximation • use the current distance • won't change that much if the rocket is fast
Accuracy? • Accuracy may be overrated • for NPC enemies • We want an enjoyable playing experience • no warning sniper attack is realistic • but no fun • a game has to give the player a chance • Built-in inaccuracy • many games have enemies deliberately miss on the first couple of shots • others build random inaccuracy into all calculations • others use weak assumptions about physics • simplify the calculations • and give a degree of inaccuracy
Force • Netwon's law • F = m*a • In other words • acceleration is a function of force and mass • Force is also a vector quantity • a force acting along a vector • imparts a velocity along that vector
Example • When a bat hits a ball • we will want to determine the force imparted to the ball • we could simulate this with the mass of the bat and its speed • more likely, we would just have a built-in value • direction of the force • we need to know the angle of the bat when it strikes the ball
More complex motions • To handle rotation • we also have to worry about torque and angular momentum • For example • if a rocket hits the back of a car • it will spin • if it hits the center, it will not
Torque • Force applied around the center of mass of an object • torque gives rise to angular acceleration (spin) • t = d F = I α d = moment arm
For our purposes • We will ignore rotational motion • deal only with forces acting on points • typical simplification for AI
Thursday • Finite state machines