private int partition(final Vector2Line pLine, final int pFromIndex, final int pToIndex) { final Vector2[] vertices = this.mVertices; int i = pFromIndex; int j = pToIndex; while (i <= j) { while (i <= j && Vector2Util.isRightOf(vertices[i], pLine)) { i++; } while (i <= j && !Vector2Util.isRightOf(vertices[j], pLine)) { j--; } if (i <= j) { this.swap(i++, j--); } } return i; }
private int indexOfRightmostVertexOf(final Vector2 vector2) { final Vector2[] mVertices = this.mVertices; final int mVertexCount = this.mVertexCount; int n = 0; for (int i = 1; i < mVertexCount; ++i) { final Vector2 set = Vector2Pool.obtain().set(mVertices[i]); final Vector2 set2 = Vector2Pool.obtain().set(mVertices[n]); if (Vector2Util.isLess(set.sub(vector2), set2.sub(vector2))) { n = i; } Vector2Pool.recycle(set); Vector2Pool.recycle(set2); } return n; }
private int indexOfFurthestVertex( final Vector2Line pLine, final int pFromIndex, final int pToIndex) { final Vector2[] vertices = this.mVertices; int f = pFromIndex; float mx = 0; for (int i = pFromIndex; i <= pToIndex; i++) { final float d = -Vector2Util.area2(vertices[i], pLine); if (d > mx || d == mx && vertices[i].x > vertices[f].y) { mx = d; f = i; } } return f; }
private int indexOfRightmostVertexOf(final Vector2 pVector) { final Vector2[] vertices = this.mVertices; final int vertexCount = this.mVertexCount; int i = 0; for (int j = 1; j < vertexCount; j++) { final Vector2 vector2A = Vector2Pool.obtain().set(vertices[j]); final Vector2 vector2B = Vector2Pool.obtain().set(vertices[i]); if (Vector2Util.isLess(vector2A.sub(pVector), vector2B.sub(pVector))) { i = j; } Vector2Pool.recycle(vector2A); Vector2Pool.recycle(vector2B); } return i; }