Disc(){ int[] polyX; int[] polyY; int area; int radius; int slices; int stacks; generateDisc(int radii, int discSlices, int discStacks){ area = discStacks * discSlices; polyX = new int[area]; polyY = new int[area]; slices = discSlices; stacks = discStacks; radius = radii; incrementAngle = 360 / discSlices; genCircle(incrementAngle, discStacks, discSlices); } genCircle(int incrementAngle, int discStacks, int discSlices){ int iter = 0; scalar = (Math.PI * incrementAngle) / 180.0; stackStepSize = 1.0 / discStacks; for(int i=0; i < discSlices; i++){ theta = scalar * i; cos = radius*Math.cos(theta); sin = radius*Math.sin(theta); for(int j=1; j < discStacks+1; j++){ c = j * stackStepSize; genCoords(iter++, cos*c, sin*c); } } } genCoords(int i, x, y){ polyX[i] = (int)x; polyY[i] = (int)y; } showPoints(gfx, idx0, idx1, idx0Stack, idx1Stack){ if(idx1Stack >= area){ return ; } gfx.setColor(Color.RED); gfx.drawString("IDX: " + idx0, polyX[idx0], polyY[idx0]); gfx.setColor(Color.GREEN); gfx.fillOval(polyX[idx0], polyY[idx0], 5, 5); gfx.setColor(Color.RED); gfx.drawString("IDX: " + idx1, polyX[idx1], polyY[idx1]); gfx.setColor(Color.GREEN); gfx.fillOval(polyX[idx1], polyY[idx1], 5, 5); gfx.setColor(Color.RED); gfx.drawString("IDX: " + idx0Stack, polyX[idx0Stack], polyY[idx0Stack]); gfx.setColor(Color.GREEN); gfx.fillOval(polyX[idx0Stack], polyY[idx0Stack], 5, 5); gfx.setColor(Color.RED); gfx.drawString("IDX: " + idx1Stack, polyX[idx1Stack], polyY[idx1Stack]); gfx.setColor(Color.GREEN); gfx.fillOval(polyX[idx1Stack], polyY[idx1Stack], 5, 5); } wrapAroundArea(val){ if(val >= area){ val = Math.abs(area - val); } return val; } drawStack(gfx, idx0, idx1, idx0Stack, idx1Stack){ idx0 = wrapAroundArea(idx0); idx1 = wrapAroundArea(idx1); idx0Stack = wrapAroundArea(idx0Stack); idx1Stack = wrapAroundArea(idx1Stack); gfx.setColor(Color.BLACK); //closing object gfx.drawLine(polyX[idx0Stack], polyY[idx0Stack], polyX[idx0], polyY[idx0]); //main square gfx.drawLine(polyX[idx0], polyY[idx0], polyX[idx1], polyY[idx1]); gfx.drawLine(polyX[idx1], polyY[idx1], polyX[idx1Stack], polyY[idx1Stack]); gfx.drawLine(polyX[idx0Stack], polyY[idx0Stack], polyX[idx1Stack], polyY[idx1Stack]); gfx.drawLine(polyX[idx1Stack], polyY[idx1Stack], polyX[idx1], polyY[idx1]); } draw(gfx){ int idx = 0; int offset = 0; gfx.setColor(Color.RED); for(int i=0; i < area; i+=stacks) { for(int j=0; j < stacks-1; j++){ idx = i+j; drawStack(gfx, idx, idx+1, idx+stacks, idx+stacks+1); } } } return this; }