• No results found

The Gilbert Johnson Keerthi Method

Convex non-spherical particles with sharp features, simulation are commonly found to employ the GJK (Gilbert Johnson Keerthi) method [27, 55, 88] to implement a particle contact model. As there is no contribution in this method so we do not dis- cuss multiple variants and models of contact point generation but instead we focus on the generic form. Contact models that are based on the GJK method implement contact point generation in two stages. At the first stage the method determines whether two particles overlap, this is performed using an iterative algorithm. When two particles are found to be in contact, the overlapped region is extracted and often re-triangulated into a convex hull geometry. The extracted region then passes through a secondary algorithm that defines unique contact points and normals. Of- ten a postprocessing filtering phase reduces all redundant contacts [28, 49, 60]. The GJK algorithm operates only on convex bodies and it assumes that both interacting particles’ are convex during contact detection. Contact detection of unstructured non-watertight triangles is not possible [38] with this method. Otherwise convex- ity has to be pseudo-temporally-constructed [27] on run the fly a priori to contact detection.

The GJK method relies on particle interpenetration to detect possible pair-wise collisions. An overlap between two convex shapes is used to indicate a contact state. Although an overlap is non-physical the nonphysical gap can be minimised or re- solved explicitly. However in some contact configurations, interpenetration raise the issue of contact divergence as shown in Figure A.7 [38]. Divergence in shapes arise (Figure A.7) when the minimum penetration depths d1, d2 of two bodies A, B give

rise to one vertical and one horizontal contact. When this interaction is simulated, this particular contact formation leads to a rightward rotation for object A. This state subsequently cause an increased penetration on the next time step. Thus creating an unpredictable outcome during the simulation. This interpenetration problem that lead to undefined behaviour is found in simulation codes that make

APPENDIX A. APPENDIX

use of GJK-based variants [27, 55, 88].

Figure A.7: Contact divergence situation due to penetration. Where A,B are convex bodies, x1, x2 contact points with normals, d1, d2 is the penetration depth. In the

next time step object A will move upwards to the right and object B downwards to the left.

The GJK method primarily relies on the Minkowski sum operation to detect when two particles overlap. For two shapes A and B, the Minkowski sum is all the points in shape A added to all the points in shape B: A + B = a + b| a ∈ A, b ∈ B. If both shapes are convex, the resulting shape is also convex. The significance for collision detection is not in the Minkowski summation but in the Minkowski sub- traction: A− B = a − b. | a ∈ A, b ∈ B. because if two shapes are intersecting the Minkowski difference will contain the origin. The origin inclusion into the produced shape is used as an indicator for collision.

(0,0)

(0,0)

Figure A.8: Left: Two convex shapes are in a state of intersection because their geometries overlap each other. Right: The Minkowski difference of the two bodies enclose the origin which indicates that the bodies intersect and thus are in contact. The computation of the Minkowski difference on two shapes as shown in Figure A.8 is the fundamental concept behind the algorithm. In Figure A.8 the geometry and position of two particles in 2D space. On the right depiction of Figure A.8 the computed Minkowski difference shape contains the origin. The enclosure of the origin indicates that the two shapes are in contact or intersect. Performing the Minkowski sum requires subtractions along the vertices but it is sufficient to per- form the subtraction on selected vertices instead of computing the whole Minkowski

APPENDIX A. APPENDIX

difference. As long as it is possible to ensure enclosure or disclosure of the origin within the Minkowski Difference, the algorithm can determine whether the shapes/- particles are in contact. Executing the GJK algorithm iteratively, a polygon is build in the Minkowski difference.

In order to build the polygon a support function is used. The support function returns a point in the Minkowski difference given two shapes. Take a point from shape A and shape B, take their difference, and obtain a corresponding point in the Minkowski difference and progressively build the polygon. To reduce the steps of the process of constructing the polygon, an origin direction support function can be used so that the simplex is build around the origin faster.

It is important to take the farthest point towards a direction at each iteration using the support function because the simplex creation should contain a maximum area therefore increase the chance of quick convergence). All the points returned by the support function should lie on the edge of the Minkowski Difference, therefore any point that skip the origin along some direction, cannot contain the origin. Using the shapes in Figure A.8 and performing the support function three times, the points of the new simplex results to a triangle (Figure A.9.

(0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2) (0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2)

Figure A.9: left: Simplex where origin is not enclosed. right: Simplex including origin. The best-case scenario is when only a triangle is created (three iterations, three simplex points) allowing to determine whether there is an intersection between two convex shapes.

If the third point in the simplex does not contain the origin, the algorithm has to recalculate another point and use that next. It is not possible to guarantee that the first formed triangle will contain the origin nor it is guaranteed that the Minkowski difference contains the origin at all until the algorithm ends. Variants of the GJK algorithm modify the iterative scheme accordingly to optimise the search direction scheme to enclose points towards the origin from within the Minkowski difference space.

APPENDIX A. APPENDIX

There are two conditions that the algorithm needs to meet to converge:

i. Simplex is containing the origin

ii. There is a direction d that encloses the origin by modifying the polygon.

Algorithm 14 Iterative GJK Pseudocode Algorithm.

1: function GJK(A, B, C, D, E, F, rho, tol)

2: d← initialguess

3: while true do

4: simplex.append(support(d))

5: if simplex.lastV ertex ˙d≤ 0 then

6: return f alse

7: else

8: if simplex contains origin then

9: return true 10: else 11: d← newdirection(simplex) 12: end if 13: end if 14: end while 15: end function (0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2) (0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2) (0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2) (0,0) (-6,9) (2,6) (4,2) (-1,2) (-8,4) (-8,2)

Figure A.10: Top left: First iteration. Top right: Second iteration. Bottom left: Backtrack iteration, set simplex, direction. Bottom right: Third iteration; deter- mined contact.

APPENDIX A. APPENDIX

The process of iteration starts off (see Algorithm 14) from a user defined initial search direction guess d (line 1). The algorithm then progressively forms a simplex geometry. To enhance the iterative process, the search for direction towards the origin is performed by a series of plane checks. When the line segment is defined from point A to point B where A is the last point added to the polygon, then both A and B are on the edge of Minkowski difference and the origin cannot lie in either normal direction (Algorithm 14). The origin can only lie in the rest uncovered area. Since a line segment cannot contain the origin, a third point is required. The perpendicular p of AB line segment towards direction of origin is p = ((B−A)×(O−A))×(B −A) where O is the origin. If the origin is on the segment then the perpendicular will be a zero vector. This occurs on two locations:

i. inside the Minkowski Sum

ii. on the edge of the Minkowski Sum.

We compute (AC× AB) × AB to yield the perpendicular vector of AB. The second iteration turns the simplex into a triangle shape (Figure A.10). By computing perpendicular p(AB) ˙AO) it is determined that the origin is in covered region.

When contact is determined then the next step is to define contact points. The overlappped region is extracted by constructing a new polygon. The overlap poly- gon is created by determining and extracting the overlapping sides/triangles (line segments, faces, vertices) of the two non-spherical particle pairs that intersect. In three dimensions triangulation of the overlap polyhedron is usually performed using a Delauney or convex hull triangulation algorithm [27]. The contact area of two polyhedra is defined by the intersection line along the surfaces of the two particles and the centre of mass of the overlap polyhedron. The normal direction of the con- tact point is then defined as the weighted average of the normals to the triangles in the triangulated surface [27].

The GJK algorithm for contact point generation is not favourable for contact simulations for several reasons. Firstly it is only suitable for geometries composed of convex polyhedrons that allow inter-penetration [27, 38]. In addition, contact de- tection using GJK requires penetration which results in contact normal divergence issues [38]. Contact divergence can be mitigated with additional checking mech- anisms in place (contact clustering) [38]. Lastly, the GJK method that requires additional algorithmic steps to contact detection (intersection extraction, triangula- tion, overlap region extraction, contact clustering) to determine contact points and normals.

APPENDIX A. APPENDIX