-
- Wstęp
- Klasa pkt3d
- Rzut równoległy
- Rzut perpektywiczny
- Jak rysować bryły
- Widoczność ściany
- Oświetlenie wielościanu
- Wykres funkcji z=f(x,y)
-
|
Teraz obliczę współrzedne wektora obserwacji (o dł.= 1) w rzucie charakteryzowanym przez kąty kierunku rzutu.
I tak z rysunku otrzumujemy kolejno:
obs.x=cosα·cosβ
obs.y=sinα·cosβ
obs.z=sinβ
|
Pozostaje "informatyzacja" rozwiązania (problem jest dokładnie ten sam dla obu modeli). Funkcja Widoczna z poprzedniego rozdziału to podstawowe narzędzie.
Pozostaje np wprowadzenie wyniku do metody rzutowanie klasy _3d.
Oto poprawiony fragment kodu klasy _3d oraz procedura oceniejąca widoczność krawędzi:
public static double sa,ca,sf,cf;
public static pkt3d obs;
//--------------------------------------------
public static void rzutowanie(int alfa,int fi)
{double alfa_=alfa*Math.PI/180;
double fi_=fi*Math.PI/180;
sa=Math.sin(alfa_);
ca=Math.cos(alfa_);
sf=Math.sin(fi_);
cf=Math.cos(fi_);
obs=new pkt3d(cf*sa,cf*ca,sf);
}
|
void ocena_Kr(int n)
{ int i,j;
for(i=0;i<=3*n-1;i++) l[i]=false;
if (widoczna(2,1,0)) //podstawa dolna
for(i=0;i<=n-1;i++) l[i]=true;
else //>tzn podstawa górna
for(i=n;i<=2*n-1;i++) l[i]=true;
for(i=0;i<=n-1;i++)
{
j=(i+1)%n;
if (widoczna(i+n,i,j)) //ściana boczna
{
l[i]=true;
l[2*n+i]=true;
l[i+n]=true;
l[2*n+j]=true;
}
}
}
|
|