[pascal]gwiazda szescioramienna(graph)

0

Witam
Jestem poczatkujacym programista i mam problem z napisaniem programu w trybie graficznym do rysowania gwiazdy 6-cio ramiennej majac podany bok a i promien r :-/
Bylbym rad gdyby ewentualnie osoba udostepniajaca kod dodala do niego komentarze.
Pilnie prosze o pomoc!

Pozdrawiam

//AklimX - tylko takie dane otrzymalem

0

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
user image

        // 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>
0

procedurka rysuje gwiazdę na srodku ekranu!!!!
wywołanie :
rysuj_gwiazde(100,200);

{r1,r2 = długości boków i promień min i max gwiazdy!!!}
procedure rysuj_gwiazde(r1,r2);
var kat:integer;
begin
  for kat:=1 to 360 do
    begin
      if kat mod 60 =0 then
      begin
        line(round(320+r1*cos(pi*kat/180)),round(240+r1*sin(pi*kat/180)),
        round(320+r2*cos(pi*(kat-30)/180)),round(240+r2*sin(pi*(kat-30)/180)));
        line(round(320+r1*cos(pi*(kat-60)/180)),round(240+r1*sin(pi*(kat-60)/180)),
        round(320+r2*cos(pi*(kat-30)/180)),round(240+r2*sin(pi*(kat-30)/180)));
      end;
    end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1