# Surface of Revolution

Hi there, I have a surface of revolution which draws half an egg. It’s working but missing the last like 10 degrees of the egg and I cannot figure out why, have spent so much time trying to figure out. Figured I’d post on the advacned section and see if there are any legends out there.

``````
float vertices[10][16][3]
Latitudes=10;
Longitudes=16;

for(latCount=0; latCount<Latitudes-1; latCount++){ // along z axis
for(longCount=0; longCount<=Longitudes; longCount++){ // x and y
z = sin(Pi*latCount/((float) (Latitudes-1))-Pi/2.0f)/5;
r = cos(Pi*latCount/((float) (Latitudes-1))-Pi/2.0f);
x = (cos(Pi*longCount/(float) Longitudes)*r) /5;
y = (sin(Pi*longCount/(float) Longitudes)*r *2) /5;

vertices[latCount][longCount][0] = x; //x
vertices[latCount][longCount][1] = y; //y
vertices[latCount][longCount][2] = z; //z

z = sin(Pi*(latCount+1)/((float) (Latitudes-1))-Pi/2.0f)/5;
r = cos(Pi*(latCount+1)/((float) (Latitudes-1))-Pi/2.0f);
x = (cos(Pi*longCount/(float) Longitudes)*r) /5;
y = (sin(Pi*longCount/(float) Longitudes)*r *2) /5;

vertices[latCount+1][longCount][0] = x; //x
vertices[latCount+1][longCount][1] = y; //y
vertices[latCount+1][longCount][2] = z; //z
}
}

for(int latCount=0; latCount<Latitudes-1; latCount++){ // along z axis
for(int longCount=0; longCount<=Longitudes; longCount++){
glVertex3f(vertices[latCount][longCount][0], vertices[latCount][longCount][1], vertices[latCount][longCount][2]);
glVertex3f(vertices[latCount+1][longCount][0], vertices[latCount+1][longCount][1], vertices[latCount+1][longCount][2]);
}

glEnd();
}

``````

Try this.

``````
for(int latCount=0; latCount<Latitudes; latCount++)
{ // along z axis
for(int longCount=0; longCount<Longitudes; longCount++){ // x and y
z = sin(M_PI*latCount/((float) (Latitudes-1))-M_PI/2.0f)/5;
r = cos(M_PI*latCount/((float) (Latitudes-1))-M_PI/2.0f);
x = (cos(M_PI*longCount/(float) (Longitudes-1))*r) /5;
y = (sin(M_PI*longCount/(float) (Longitudes-1))*r *2) /5;

vertices[latCount][longCount][0] = x; //x
vertices[latCount][longCount][1] = y; //y
vertices[latCount][longCount][2] = z; //z
}}

``````

For me this code is working fine. The number of iteration in your loops is incorrect and the calculation of x and y is wrong. Also
you calculate some value twice.

Wicked!! Thanks that is a much neater solution. Cheers!

Hi

i want the same thing, i followed your code but i cant rotate it after i draw it.

this is how i am drawing it.

int lt, lg, numLatitudes=10, numLongitudes=16;
double x,y,z,r;
for(lt=0; lt<numLatitudes-1; lt++){