|
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);
}
|
|