package org.andengine.util.algorithm.hull; /** * (c) Zynga 2012 * * @author Nicolas Gramlich <ngramlich@zynga.com> * @since 14:52:48 - 08.02.2012 */ public class HullUtils { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== public static int indexOfLowestVertex(final float[] pVertices, final int pVertexCount, final int pVertexOffsetY, final int pVertexStride) { /* Simply choose 0 as the first candidate. */ int lowestVertexIndex = 0; float lowestVertexY = pVertices[pVertexOffsetY]; final int lastVertexOffset = pVertexCount * pVertexStride; /* Starting at one since, since we chose 0 as a the first candidate. */ int currentVertexIndex = 1; int currentVertexOffsetY = pVertexStride + pVertexOffsetY; /* Loop to the end. */ while(currentVertexOffsetY < lastVertexOffset) { final float currentVertexY = pVertices[currentVertexOffsetY]; /* Check if the current candidate is lower and if so, assign it. */ if(currentVertexY < lowestVertexY) { lowestVertexIndex = currentVertexIndex; lowestVertexY = currentVertexY; } currentVertexIndex++; currentVertexOffsetY += pVertexStride; } return lowestVertexIndex; } public static void swap(final float[] pVertices, final int pVertexStride, final int pVertexIndexA, final int pVertexIndexB) { final int vertexOffsetA = pVertexIndexA * pVertexStride; final int vertexOffsetB = pVertexIndexB * pVertexStride; for(int i = pVertexStride - 1; i >= 0; i--) { final float tmp = pVertices[vertexOffsetA + i]; pVertices[vertexOffsetA + i] = pVertices[vertexOffsetB + i]; pVertices[vertexOffsetB + i] = tmp; } } // =========================================================== // Inner and Anonymous Classes // =========================================================== }