która odległość to bok, a która to promień?
przykładowa aplikacja:
http://83.25.228.165/download/szesciokat.rar
(mam nadzieje, ze nie ma problemów ze ściąganiem; rapidshare coś nie chciał współpracowąć ;p)
kod tylko w cpp, ale bedziesz wiedział co jest grane
// przesunięcie na ekranie, x i y
float movex(400);
float movey(300);
// funkcje cos() i sin() pobierają wartość w radianach, więc trzeba co nieco przekształcić
float piover180 (3.14159/180.0);
// rozpocznij rysowanie lini
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
for (int i=0; i<6; i++)
{
// aqua dots
glVertex3f( movex+cos(i*60*piover180)*a , movey+sin(i*60*piover180)*a , -10);
// yellow dots
glVertex3f( movex+cos((i*60+30)*piover180)*r , movey+sin((i*60+30)*piover180)*r , -10);
}
glEnd();
glBegin(GL_POINTS);
for (int i=0; i<6; i++)
{
glColor3f(0,1,1);
glVertex3f( movex+cos(i*60*piover180)*a , movey+sin(i*60*piover180)*a , -10);
glColor3f(1,1,0);
glVertex3f( movex+cos((i*60+30)*piover180)*r , movey+sin((i*60+30)*piover180)*r , -10);
}
glEnd();
samo działanie nie jest trudne
a teraz dla dowolnego nkata
http://83.25.228.165/download/nkat.rar
// przesunięcie na ekranie, x i y
float movex(400);
float movey(300);
// czworo-/pięcio-/sześcio-/dziesięciokąt
static char nkat(6);
// funkcje cos() i sin() pobierają wartość w radianach, więc trzeba co nieco przekształcić
float piover180 (3.14159/180.0);
// rozpocznij rysowanie lini
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
for (int i=0; i<nkat; i++)
{
// aqua dots
glVertex3f( movex+cos(i*360/nkat*piover180)*a , movey+sin(i*360/nkat*piover180)*a , -10);
// yellow dots
glVertex3f( movex+cos((i*360/nkat+180/nkat)*piover180)*r , movey+sin((i*360/nkat+180/nkat)*piover180)*r , -10);
}
glEnd();
glBegin(GL_POINTS);
for (int i=0; i<nkat; i++)
{
glColor3f(0,1,1);
glVertex3f( movex+cos(i*360/nkat*piover180)*a , movey+sin(i*360/nkat*piover180)*a , -10);
glColor3f(1,1,0);
glVertex3f( movex+cos((i*360/nkat+180/nkat)*piover180)*r , movey+sin((i*360/nkat+180/nkat)*piover180)*r , -10);
}
glEnd();
</cpp>