Date post: | 30-Dec-2015 |
Category: |
Documents |
Upload: | august-moore |
View: | 221 times |
Download: | 1 times |
Collision handling:detection and response
CSE 3541Matt Boggus
Collision handling overview
Point collision detectionLine segment and ray collision detectionPolyhedron-polyhedron collision detection
Bounding volume testVertex inside polyhedron test
Concave caseConvex case
Edge-face intersection test
Kinematic response
Penalty method
detection
response
Geometric modeling primitives
• Point
• Line segment
• Polygon
Terminology – convex and concave polygons
Convex and concave – line test
Convex and concave – interior angles
Polygon triangulationsplit into a set of convex polygons
Types of equations
• Explicit y = f(x)– Ex: y = mx + b
• Implicit f(x,y) = 0– Ex: x2 + y2 – 1 = 0– Given values for (x,y), say x = a and y = b, compute f(a,b) = c
• c > 0, then (a,b) is “outside” shape f• c = 0, then (a,b) is on the boundary/surface of shape f• c < 0, then (a,b) is “inside” shape f
• Parametric form (x,y) = (f(u),g(u))– Ex: x = f(t) = r cos (t) , y = g(t) = r sin (t)– Given any value for t parameter, compute a point (x,y)
Parametric line equation• P(t) = P0 + t V– P0 is point on line– V is direction (or slope) of line– On line segment with P1, t ranges from (0,1)
• x = P0.x + t * (P1 – P0).x
• y = P0.y + t * (P1 – P0).y
Point on a line segment• Given (x,y), is it on a line segment (P1 to P0)?
• x = P0.x + tx * (P1 – P0).x
• y = P0.y + ty * (P1 – P0).y
• Plug in x, y, P0, P1, solve for tx and ty
• On the segment if 0 ≤ tx = ty ≤ 1
Examples
• P0 = (0,0)
• P1 = (1,1)
• P = (0.5, 0.5)• P = (-1, -1)• P = (2, 2)• P = (5, 0)
Line intersection – two equations
• Pa = P0 + ta (P1 – P0)
• Pb = P2 + tb (P3 – P2)
• Set them equal, solve for ta and tb
– Note that these are vector equations, not scalars
• Line segment intersection if – 0 <= ta <= 1, and
– 0 <= tb <= 1
Line intersection – visual example
Point in polygon – ray test
Ray test special cases
Point in convex polygon
(y - y0) (x1 - x0) - (x - x0) (y1 - y0)
> 0, point is to the left of the line< 0, point is to the right of the line= 0, point is on the line
Point in convex polygon
(y - y0) (x1 - x0) - (x - x0) (y1 - y0) For (3,1):(1)(5) – (3)(0) = 5
For (3,0):(0)(5) – (3)(0) = 0
For (3,-1):(-1)(5) – (3)(0) = -5
Polygon Intersection
Contained vertex Intersecting edges
Polygon intersection – vertex + edges
Collision detection: point-ground plane
0y
0y
0y
p = (x, y, z)
Surface/Polygon normals
Images from http://en.wikipedia.org/wiki/Normal_(geometry)
Collision detection: point-plane
dpNdczbyaxpE )(
0)( pE
0)( pE
0)( pEN
N = (a, b, c)
p = (x, y, z)
Terms:p = pointN = normal vectorD = distance from origin
Collision detection: time of impact
2 optionsConsider collision at next time stepCompute fractional time at which collision actually occurred
Tradeoff: accuracy v. complexity
P(ti)
P(ti+1)
3D object collision detection
Collision detection: polyhedra
• Order tests according to computational complexity and power of detection
2. test for vertex of one object inside of other object
1. test bounding volumes for overlap
3. test for edge of one object intersecting face of other object
Polygon and polyhedra complexity
How many edges? How many points?
Bounding objects
• Sphere
• Axis aligned bounding box
• Oriented bounding box
Bounding volume construction
• Given a set of points as input, can we automatically create bounding volumes
– Axis aligned bounding box
– Sphere
– Convex hull
Axis aligned bounding box
Axis aligned bounding box
Bounding sphere
Bounding sphere
Bounding sphere
Bounding sphere
Convex HullBest fit convex polyhedron to concave polyhedron but takes some (one-time) computation
1. Find highest vertex, V12. Find remaining vertex that minimizes angle
with horizontal plane through point. Call edge L3. Form plane with this edge and horizontal line
perpendicular to L at V14. Find remaining vertex that for triangle that
minimizes angle with this plane. Add this triangle to convex hull, mark edges as unmatched
5. For each unmatched edge, find remaining vertex that minimizes angle with the plane of the edge’s triangle
Convex hull
Convex hull
Convex hull
Convex hull
Convex hull
Convex hull
Convex hull
Bounding SlabsFor better fit bounding polyhedron: use arbitrary (user-specified) collection of bounding plane-pairs
Is a vertex between each pair?
12 dPNd
Sphere vs. Sphere
Compare distance (p1,p2) to r1+r2
distance(p1,p2)2 to (r1 + r2)2
AABB vs. AABB
AABB vs. AABB
Oriented bounding boxes and arbitrary polygons
• Separating axis theorem– http
://gamedev.tutsplus.com/tutorials/implementation/collision-detection-with-the-separating-axis-theorem/
– http://www.sevenson.com.au/actionscript/sat/– http://
www.metanetsoftware.com/technique/tutorialA.html
Sphere vs. AABB
Sphere vs. AABB – clamping
Sphere vs. AABB – closest point
Collision detection: swept volumeTime & relative direction of travel sweeps out a volumeOnly tractable in simple cases (e.g. linear translation)
If part of an object is in the volume, it was intersected by object
Collision detection: polyhedra
2. test for vertex of one object inside of other object
1. test bounding volumes for overlap
3. test for edge of one object intersecting face of other object
Collision detection: polyhedra
Intersection = NOFor each vertex, V, of object A
if (V is inside of B) intersection = YESFor each vertex, V, of object B
if (V is inside of A) intersection = YES
A vertex is inside a convex polyhedron if it’s on the ‘inside’ side of all faces
A vertex is inside a cancave polyhedron if a semi-infinite ray from the vertex intersects an odd number of faces
Collision detection: polyhedra
Edge intersection face testFinds all polyhedral intersections,but is the most expensive test:for all faces (i) for all edges (j) test face i for intersection with edge j
If vertices of edges are on opposite side of plane of faceCalculate intersection of edge with planeDetermine if that point of intersection is inside the face
Collision detection speedup
Particle collision detection loop
ArrayList Particles = new ArrayList();Particle p;Particles.Add(p);…
void HandleAllParticleCollisions(){for(int i=0; i < Particles.Count; i++){
for(int j ) {// test Particles i and j for collision
}}
}
=i+1 j < Particles.Count; j++
Collision detection speedup
• Two approaches
– Bound the object
– Bound the space the object is contained in
Hierarchical bounding volumes
Approximating polyhedra with spheres for time-critical collision detection, by Philip M. Hubbard
HBV example
HBV example
HBV example
Spatial subdivision – grid (quadtrees and octrees)
Spatial subdivision – binary space partitioning
Collision response
Collisions: physics review
• Momentum• In a closed system, momentum is conserved
• After a collision, the sum of all momentums is the same as the sum of all momentum before the collision
mvp
''vmmvp
Collision typesElastic collisions – no loss of kinetic energy (e.g. deformations, heat)
Inelastic collisions – loss of kinetic energy
2
2
1mvE Kinetic energy
Elastic collision with stationary object: horizontal and vertical walls/planes
• For vertical wall/boundary– Negate x component of
velocity– Preserve y component of
velocity
• Ex: v0 = (3,-3) ; v = (-3,-3) • For horizontal
walls/boundaries– Preserve x– Negate y
Elastic collision with stationary object: angled walls/planes
• Still split velocity vector into components– Now with respect to the normal
(n) of the wall
• u = (v * n / n * n) n– Note: * is dot product– Vector/direction is parallel to n– Scalar/magnitude is in opposite
direction of n; (v * n) < 0
• w = v – u• Reflected velocity: v’ = w – u
Elastic collision with movable object
Inelastic Collisions
Objects stick together,momentum is conserved
Coefficient of restitution ratio of velocities before and after collision (dampen the resulting velocity)
Collision response: damped
Damping factor = 0.8
Collision response – penalty method
Collision response: penalty
Additional issues
• Adding physics for rotation• Handling multiple collisions
• Resting contact