```Computational Geometry
& Collision detection
Vectors, Dot Product, Cross Product,
Basic Collision Detection
George Georgiev
Telerik Corporation
www.telerik.com
 Vectors
 Extended revision
 The vector dot product
 The vector cross product
 Collision
detection
 In Game programming
 Sphere collision
 Bounding volumes
 AABBs
2
Vectors
Revision, Normals, Projections
Vectors – revision
 Ordered sequences of numbers
 OA (6, 10, 18) – 3-dimensional
 OA (6, 10) – 2-dimensional
 OA (6, 10, 18, -5) – 4-dimensional
A
 Have magnitude and direction
4
Vectors – revision
 No location
 Wherever you need them
 Can represent points in space
 Points are vectors with a beginning at the
coordinate system center
 Example:
 Point A(5, 10) describes the location (5, 10)
 Vector U(5, 10), beginning at (0, 0), describes ‘the
path’ to the location (5, 10)
5
Vectors – revision
 All vectors on the same line are called collinear
 Can be derived by scaling any vector on the line
 E.g.: A(2, 1), B(3, 1.5), C(-1, -0.5) are collinear
 Two vectors, which are not collinear,
lie on a
plane and are called coplanar
 => Two non-collinear vectors define a plane
 Three vectors, which are not coplanar,
define a
space
6
Vectors – revision
 Collinear
vectors:
 Coplanar
vectors:
7
Vectors – revision
 Vectors defining a 3D vector space
8
Vectors – revision
 Perpendicular
vectors
 Constitute a right angle
 Deriving a vector, perpendicular to a given one:
 Swap two of the coordinates of the given vector
(one of the swapped coordinates can’t be zero)
 Multiply ONE of the swapped coordinates by -1
 Example:
 A (5, 10) given => A’(-10, 5) is perpendicular to A
 V (3, 4, -1) given => V’(3, 1, 4) is perpendicular to V
9
Vectors – revision
 Normal vectors to a surface
 Constitute a right angle with flat surfaces
 Perpendicular to at least two non-collinear
vectors on the plane
 Constitute a right angle with the tangent to
curved surfaces
10
Vectors – revision
 Projection of a vector on another vector
11
Vector Dot Product
Definition, Application, Importance
Vector dot product
 Dot Product (a.k.a. scalar
product)
 Take two equal-length sequences
 e.g. sequence A (5, 6) and sequence B (-3, 2)
 Multiply each element of A with each element
of B
 A [i] * B [i]
 Dot Product(A, B) =
A[0] * B[0] + A[1] * B[1] + … + A[i] * B[i] + … + A[n-1] * B[n-1]
13
Vector dot product
 Dot Product (2)
 Example:
 A (5, 6)
= -3
B (-3, 2) = 5 * (-3) + 6 * 2 = -15 + 12
 Result
 A scalar number
14
Vector dot product
 Dot product of coordinate vectors
 Take two vectors of equal dimensions
 Apply the dot product to their coordinates
 2D Example:
 A(1, 2) . B(-1, 1) = 1*(-1) + 2*1 = 1
 3D Example:
 A(1, 2, -1) . B(-1, 1, 5) = 1*(-1) + 2*1 + (-1) * 5 = -4
 Simple as that
15
Vector dot product
 Meaning in Euclidean geometry
 If A(x1, y1, …), B(x2, y2, …) are vectors
 theta is the angle, in radians,
between A and B
 Dot Product (A, B) = A . B =
= |A|*|B|*cos(theta)
 Applies to all dimensions (1D, 2D, 3D, 4D, … nD)
16
Vector dot product
 Meaning in Euclidean geometry (2)
 If U and V are unit vectors, then U . V =
 cosine of the angle between U and V
 the oriented length of the projection of U on V
 If U and V are non-unit vectors
 ( U . V ) divided by |U|*|V| = cosine of the angle
between U and V
 ( U . V ) divided by |V| = the oriented length of the
projection of U on V
17
Vector dot product
 Consequences
 If A . B > 0, A and B are in the same half-space
 If A . B = 0, A and B are perpendicular
 If A . B < 0, A and B are in different half-spaces
 Applications
 Calculating angles
 Calculating projections
 Calculating lights
 Etc…
18
Dot Product Computation
Live Demo
Vector Cross Product
Definition, Features, Application
Vector cross product
 Cross product
 Operates on vectors with up to 3 dimensions
 Forms a determinant of a matrix of the vectors
 Result – depends on the dimension
 In 2D – a scalar number (1D)
 In 3D – a vector (3D)
 Not defined for 1D and dimensions higher than 3
21
2D Vector cross product
 2D Cross
product
 Take the vectors U(x1, y1) and V(x2, y2)
 Multiply their coordinates across and subtract:
 U(x1, y1) x V(x2, y2) = (x1 * y2) – (x2 * y1)
 Result
 A scalar number
22
2D Vector cross product
 Scalar
meaning in Euclidean geometry
 If U(x1, y1) and V(x2, y2) are 2D vectors
 theta is the angle between U and V
 Cross Product (U, V) = U x V =
= |U| * |V| * sin(theta)
 |U| and |V| denote the length of U and V
 Applies to 2D and 3D
23
2D Vector cross product
 Scalar
meaning in Euclidean geometry (2)
 For every two 2D vectors U and V
 U x V = the oriented face of the parallelogram,
defined by U and V
 For every three 2D points A, B and C
 If U x V = 0, then A, B and C are collinear
 If U x V > 0, then A, B and C constitute a ‘left
turn’
 If U x V < 0, then A, B and C constitute a ‘right
turn’
24
2D Vector cross product
 Applications
 Graham scan (2D convex hull)
 Easy polygon area computation
 Cross product divided by two equals oriented
(signed) triangle area
 2D orientation
 ‘left’ and ‘right’ turns
25
2D Cross Product
Computation
Live Demo
3D Vector cross product
 3D Cross
product
 Take two 3D vectors U(x1, y1, z1) and V(x2, y2, z2)
 Calculate the following 3 coordinates
 x3 = y1*z2 – y2*z1
 y3 = z1*x2 – z2*x1
 z3 = x1*y2 – x2*y1
 Result
 A 3D vector with coordinates (x3, y3, z3)
27
3D Vector cross product
 Meaning in Euclidean geometry
 The magnitude
 Always positive (length of the vector)
 Has the unsigned properties of the 2D dot
product
 The vector
 Perpendicular to the initial vectors U and V
 Normal to the plane defined by U and V
 Direction determined by the right-hand rule
28
3D Vector cross product
 The right-hand rule
 Index finger points in direction of first vector (a)
 Middle finger points in direction of second
vector (b)
 Thumb points up in direction of the result of
axb
29
3D Vector cross product
 Unpredictable results
occur with
 Cross product of two collinear vectors
 Cross product with a zero-vector
 Applications
 Calculating normals to surfaces
 Calculating torque (physics)
30
3D Cross Product Computation
Live Demo
Computational geometry
Questions?
Collision detection
Basics, Methods, Problems, Optimization
Collision detection
 Collisions
in Game programming
 Any intersection of two objects’ geometry
 Raise events in some form
 Usually the main part in games
 Collision
response – deals with collision events
34
Collision detection
 Collision
objects
 Can raise collision events
 Types
 Spheres
 Cylinders
 Boxes
 Cones
 Height fields
 Triangle meshes
35
Collision detection
 Sphere-sphere collision
 Easiest to detect
 Used in
 particle systems
 low-accuracy collision detection
 Collision occurrence:
 Center-center distance less than sum of radiuses
 Optimization
 Avoid computation of square root
36
Sphere-sphere collision
detection
Live Demo
Collision detection
 Triangle
meshes collision
 Very accurate
 Programmatically heavy
 Computation heavy (n2)
 Rarely needed
38
Collision detection
 Collision
detection in Game programming
 Combines several collision models
 Uses bounding volumes
 Uses optimizations
 Axis-sweep
 Lower accuracy in favor of speed
39
Collision detection
 Bounding volumes
 Easy to check for collisions
 Spheres
 Boxes
 Cylinders, etc.
 Contain high-triangle-count meshes
 Tested for collision before the contained objects
 If the bounding volume doesn’t collide, then the
mesh doesn’t collide
40
Collision detection
 Bounding sphere
 Orientation-independent
 Center – mesh’s center
 distance from mesh center to farthest vertex
 Effective for
 convex, oval bodies
 mesh center equally distant from surface vertices
 rotating bodies
41
Bounding sphere generation
Live Demo
Collision detection
 Minimum bounding sphere
 Center – the center of the segment, connecting
the two farthest mesh vertices
 Radius – the half-length of the segment,
connecting the two farthest mesh vertices
 Efficient with
 convex, oval bodies
 rotating bodies
 Sphere center rotated with the other mesh vertices
43
Minimum bounding sphere
generation
Live Demo
Collision detection
 Axis-aligned
bounding box (AABB)
 Very fast to check for collisions
 Usually smaller volume than bounding spheres
 Edges parallel to coordinate axes
 Minimum corner
 coordinates – lowest coordinate ends of mesh
 Maximum corner
 coordinates – highest coordinate ends of mesh
45
Collision detection
 Axis-aligned
bounding box (2)
 Efficient with
 non-rotating bodies
 convex bodies
 oblong bodies
 If the body rotates, the AABB needs to be
recomputed
46
Axis-aligned bounding box
generation
Live Demo
Collision detection
 Checking AABBs for collision
 Treat the minimum and maximum corners’
coordinates as interval edges
 3D case
 If the x intervals overlap
 And the y intervals overlap
 And the z intervals overlap
 Then the AABBs intersect / collide
48
Axis-aligned bounding box
collision detection
Live Demo
Collision detection
 Oriented bounding box (OBB)
 Generated as AABB
 Rotates along with the object’s geometry
 Rotating it is much faster than creating an new
AABB
 Usually less volume than AABB