Przyklad II
Janusz Sobieraj - 28 LO

Suma ostroslupów scietych - graniastoslup "z brzuszkiem"

Zastosowalem dokladnie ten sam model rzutowania (patrz klasa _3d) oraz te sama reprezentacje bryly.

Wierzcholki ponumeruje:
  1. podstawa dolna: 0..n-1
  2. podstawa srodkowa: n..2n-1
  3. podstawa górna: 2n..3n-1
void  wierzcholki()
{
  double fi=2*Math.PI/ile;
  for(int i=0;i<ile;i++)
  {
    //---wierzcholki podstawy dolnej-------------------
    w[i].war(r*Math.cos(i*fi),r*Math.sin(i*fi),-h/2);
    //---wierzcholki podstawy srodkowej----------------
    w[i+ile].war(rb*Math.cos(i*fi),rb*Math.sin(i*fi),0);
    //---wierzcholki podstawy dolnej--------------------
    w[i+2*ile].war(w[i].x,w[i].y,h/2);
  }
}

Krawedzie ponumeruje:
  1. podstawy dolnej: 0..n-1
  2. podstawy srodkowa: n..2n-1
  3. podstawy górna: 2n..3n-1
  4. boczne dolne: 3n..4n-1
  5. boczne górne: 4n..5n-1

void  krawedzie()
{
  for(int i=0;i<ile;i++)
  {
    //--- kr. podst. dolnej------
    l1[i]=i;
    l2[i]=(i+1)%ile;
    //--- kr. podst. srodkowej---
    l1[i+ile]=ile+i;
    l2[i+ile]=ile+((i+1)%ile);
    //--- kr. podst. górnej------
    l1[2*ile+i]=i;
    l2[2*ile+i]=ile+i;
    //--- kr. boczne dolne-------
    l1[i+3*ile]=2*ile+i;
    l2[i+3*ile]=2*ile+((i+1)%ile);
    //--- kr. boczne górne-------
    l1[4*ile+i]=i+ile;
    l2[4*ile+i]=2*ile+i;
  }
}
void  rysuj(Graphics g) 
{ 
 for(int i=0;i<5*ile;i++) 
 if(l[i]) 
  _3d.linia(g,w[l1[i]],w[l2[i]]); 
}
A oto kluczowe procedury :
void  ocena_widocznosci()
{int i,j;
  for(i=0;i<5*ile;i++) l[i]=false;
  //---podstawy--------------------
  if(widoczna(2,1,0))
   for(i=0;i<ile;i++) l[i]=true;
    else
     for(i=3*ile;i<4*ile;i++)
         l[i]=true;
  for(i=0;i<ile;i++)
  {
    j=(i+1)%ile;
    //---sciany boczne dolne---------
    if(widoczna(i,j,i+ile))
    { 
     l[i]=true;
     l[2*ile+i]=true;
     l[i+ile]=true;
     l[2*ile+j]=true;
    }
    //---sciany boczne górne---------
    if(widoczna(i+ile,j+ile,i+2*ile))
    {
     l[i+ile]=true;
     l[3*ile+i]=true;
     l[i+4*ile]=true;
     l[4*ile+j]=true;
    }
  }
}