 Download Download Presentation Lecture 5

# Lecture 5

Télécharger la présentation ## Lecture 5

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
##### Presentation Transcript

1. Lecture 5 Announcements

2. Tou II Feedback • handins look varied and fun! • write a Range or Interval class • makes math code easier to • write • read • modify • makes M I easier to build on top of Tou

3. Limbo playthrough Saturday 8pm, CIT 506 hosted by BGD

4. Zynga Guest Lecture October 24th

5. Announcements Questions?

6. Lecture 5 Physics I

7. Physics I Integration

8. Velocity • rate at which position changes • just incrementpos? • pos = pos + vel • works fine with constant frame rate… • but frame rates vary • so always use time • pos = pos +vel*time

9. Acceleration • the rate at which velocity changes • useful for gravity, springs, wind… • vel = vel + acc*time

10. Which order to update? Position first (Euler) Velocity first (“Symplectic Euler”) vel = vel + acc*time pos = pos + vel*time • pos = pos + vel*time • vel = vel + acc*time

11. Which order to update? Position first (Euler) Velocity first (“Symplectic Euler”) vel = vel + acc*time pos= pos+ vel*time stabler than Euler; use this • pos= pos+ vel*time • vel= vel + acc*time

12. Physics I Collision Response

13. Collision response • you know how to detect whether 2 objects collide • how do we make objects respond in a physically believable way? • general strategy: • move objects out of collision • change their velocities

14. Moving out of collision • many ways to move the ball out of the wall • we want the minimum • “minimum translation vector” (MTV) • same as overlap • for now, assume we can find MTV

15. Changing velocity for collision • just reverse the object’s velocity? • reverse the y component? • reverse the perpendicular component? • what if 2 moving objects collide?

16. 2-moving-object collisions • reverse both velocities? • doesn’t always work • apply equal and opposite forces • an instantaneous force is called an impulse

17. Units without mass with mass (no equivalent) momentum kg m/s force kg m/s2 impulse kg m/s • position m • velocity m/s • acceleration m/s2

18. Implementing force and impulse • applyForce(…) accumulates force • applyImpulse(…) accumulates impulse • onTick(…) applies force and impulse, clearing them for next frame • applyForce(…) and applyImpulse(…) only take effect on next onTick(…) • “static” (immovable) objects can override applyForce (…) and applyImpulse (…) and make them noops classEntity{ float mass; Vec2fpos, vel; Vec2fimpulse, force; voidapplyForce(Vec2ff) { force+= f; } void applyImpulse(Vec2fp) { impulse += p; } void onTick(float t) { vel += t*force/m + impulse/m; pos += t*vel; force= impulse = 0; } }

19. Impulse collision response • translate objects out of collision • each by MTV/2 • or proportional to velocity in direction of MTV • apply some impulse proportional to MTV to each object • how much? • this week: guess/hack • next week: more realistic

20. Collision callbacks void onCollide(Entity); void onCollide(Collision); • pass in other Entity • separate CollisionInfo object • pass in the MTV • maybe pass in which shapes collided • enemies with weak points • maybeallow callback to prevent solid collision response • one-way platforms classEntity { booleanonCollide(Collision); } classCollision { final Entityother; final Vec2fmtv; final ShapethisShape; final ShapeotherShape; }

21. Physics I Minimum Translation Vector

22. MTV in one dimension • in 1D, convex shapes are line segments (intervals) • these have a 1D MTV • similar to overlap • but it has a sign • write a method that computes this • use it to find shapes’ MTV

23. Computing MTV • for each (normalized!) axis, find 1D MTV of shapes’ projections • find the axis giving minimum 1D MTV • 2D MTV is 1D MTV times that (normalized) axis

24. MTV interactive demo • same as last week • arrows are potential MTVs for box against triangle • purple arrows are the actual MTV • SAT guarantees that MTV is on a separating axis

25. Computing intervals’ MTV FloatintervalMTV(Interval a, Interval b) FloataRight= b.max - a.min FloataLeft = a.max- b.min ifaLeft< 0 || aRight < 0 returnnull ifaRight < aLeft returnaRight else return-aLeft

26. Computing polygons’ MTV VecshapeMTV(Shape a, Shape b) FloatminMagnitude = +infinity Vecmtv = null forVec axis in allAxes Float mtv1d = intervalMTV(a.proj(axis), b.proj(axis)) if mtv1d is null returnnull if abs(mtv1d) < minMagnitude minMagnitude = abs(mtv1d) mtv = axis.smult(mtv1d) returnmtv

27. Computing circles’ MTV • Circle vs Circle • compare dist(center1, center2) and sum of radii • MTV is parallel to line connecting centers • Circle vs Poly • use the same set of axes you did last week: • Poly’s edge normals • vector from circle center to closest vertex

28. Computing circles’ MTV (ctd) • Circle vs Box • if Box contains circle center • use Box’s axes • otherwise • clamp circle center to Box • compare dist(center, clampedPoint) and radius • MTV is parallel to line connecting

29. Computing boxes’ MTV • easy but inefficient way: • Box converts itself to a Poly • efficient way: • use (0, 1) and (1, 0) as the only 2 axes

30. MTV pitfalls • be careful with signs and argument order • especially when reversing args for double dispatch • can use asserts: • MTV of shape A to move it out of shape B should point from Bto A • assert dot(MTV, A.center– B.center) > 0

31. Physics I Questions?

32. Lecture 5 Tips for MI

33. Gravity • on each tick, for each entity e, e.applyForce(g.smult(e.mass)) • static objects’ applyForce does nothing

34. Player motion • set velocity while left or right is held? • too sudden • can interact badly with other physics • apply force while left or right is held? • asteroids!

35. Goal velocity • goalVelocity set directly from arrow keys • gradually set velocity to goalVelocity • by applying a force

36. Tips for M I Questions?

37. Annotations Java Tip of the Week

38. Pitfalls of inheritance • Entity what if you change name? change arg types? might forget to change a subclass subclass’ method no longer overrides anything! how to avoid? • onTick(long) • onTick(float) • PhysicsEntity • onTick(long) • onTick(float) • Player • Enemy • Bullet • onTick(long) • onTick(long) • onTick(long) • onTick(float) • onTick(float)

39. The @Overrideannotation • whenever you override a method, mark it @Override • if superclass changes, you get a compile error • Eclipse can insert these for you public class Entity { public voidonTick(float t) { // ... } } public classBullet extendsPhysicsEntity{ @Override publicvoid onTick(long t) { // ... } } Bullet.java:2: method does not override or  implementamethod from a supertype

40. Other standard annotations • annotations can mark • classes • methods • fields • variables • parameters • can create your own… • see Oracle’s tutorial if you’re curious • @Deprecated • alternative to removing a method entirely • compile warning when marked method is used • @SuppressWarnings • tells the compiler not to catch you when you fall • avoid if at all possible

41. Annotations Questions?

42. Tou 2 playtesting! Hooray!