1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| private void subdivideCircle(int radius, float[] v1, float[] v2, int depth) { float v11[] = new float[3]; float v22[] = new float[3]; float v00[] = {0, 0, 0}; float v12[] = new float[3]; if (depth==0) { gl.glColor3f(v1[0]*v1[0], v1[1]*v1[1], v1[2]*v1[2]); for (int i = 0; i<3; i++) { v11[i] = v1[i]*radius; v22[i] = v2[i]*radius; } drawtriangle(v11, v22, v00); return; } v12[0] = v1[0]+v2[0]; v12[1] = v1[1]+v2[1]; v12[2] = v1[2]+v2[2]; normalize(v12); subdivideCircle(radius, v1, v12, depth-1); subdivideCircle(radius, v12, v2, depth-1); }
public void drawCircle(int cRadius, int depth) { subdivideCircle(cRadius, cVdata[0], cVdata[1], depth); subdivideCircle(cRadius, cVdata[1], cVdata[2], depth); subdivideCircle(cRadius, cVdata[2], cVdata[3], depth); subdivideCircle(cRadius, cVdata[3], cVdata[0], depth); }
public void normalize(float vector[]) { float d = (float)Math.sqrt(vector[0]*vector[0] +vector[1]*vector[1] + vector[2]*vector[2]); if (d==0) { System.out.println("0 length vector: normalize()."); return; } vector[0] /= d; vector[1] /= d; vector[2] /= d; }
public void drawtriangle(float[] v1, float[] v2, float[] v3) { gl.glBegin(GL.GL_TRIANGLES); gl.glVertex3fv(v1); gl.glVertex3fv(v2); gl.glVertex3fv(v3); gl.glEnd(); } |