Przykład
Janusz Sobieraj - 28 LO

Przykładowe zadanie grafiki R2

Zadanie Masz dany bok a trójkąta równobocznego i liczbę (int) n okręgów wpisanych tak, jak pokazano na rysunku obok.
Napisz aplet realizujący zadanie.
Rozwiązanie
1° Ustalę potrzebną strukturę danych
pkt2d w[ ]=new pkt2d[3]; // wierzch. A, B, C
void w3( )
{double h=0.5*a*Math.sqrt(3);
    w[0]=new pkt2d(-a/2,-h/3);
    w[1]=new pkt2d(a/2,-h/3);
    w[2]=new pkt2d(0,2*h/3);
}


2° Narysuję trójkąt i oznaczę jego wierzchołki
void trojkat(Graphics g)
{String zd="ABC";
    lo28.kursor(g,w[2]);
    for(int i=0;i<3;i++)
    {
      g.setColor(Color.gray);
      lo28.kreska(g,w[i]);
      g.setColor(Color.red);
      lo28.okrag(g,w[i],0.1);
      lo28.pisz(g,w[i],zd.substring(i,i+1));
    }
}



3° Obliczymy promień okręgu "wpisanego" oraz współrzędne S (patrz aplet):

AB=(n-2)·2·r+2·r + 2·AS1=a i dalej
a=2·n·r-2·r+2·r·√3

     ½ ·bok
r= -----------
    n-1+√3
S=s(x,y)
s.x=w[0].x+r*Math.sqrt(3);
s.y=r+w[0].y;



4° Sformułuję algorytm główny apletu

void wpisane(Graphics g)
{
    double r=0.5*a/(n-1+Math.sqrt(3));
    double h=r*Math.sqrt(3);
    pkt2d s=new pkt2d(w[0].x+h,w[0].y+r);

    g.setColor(lo28.pioro);
    for(int j=0;j<n;j++)
       for(int i=0;i<n-j;i++)
    lo28.okrag(g,lo28.p2d(s.x+2*r*i+r*j,s.y+j*h),r);
}


Obok aplet wykonany wg tego opisu