public static void unitCircleLoop2D <Data>(int numSegments, LineCallback2DData <Data> lineCallback, Data data) { if (lineCallback == null) { throw new System.ArgumentNullException(); } if (numSegments < 3) { numSegments = 3; } unitArcLoop2D(0.0f, (float)Mathf.PI * 2.0f, numSegments, lineCallback, data); }
public static void unitArcLoop2D <Data>(float startAngle, float endAngle, int numSegments, LineCallback2DData <Data> lineCallback, Data data) { if (lineCallback == null) { throw new System.ArgumentNullException(); } if (numSegments <= 0) { throw new System.ArgumentException(); } var prevSinCos = getSinCos(startAngle); float angleStep = (endAngle - startAngle) / (float)numSegments; for (int i = 1; i <= numSegments; i++) { float curAngle = startAngle + angleStep * (float)i; var curSinCos = getSinCos(curAngle); lineCallback(prevSinCos, curSinCos, data); prevSinCos = curSinCos; } }