Widok drogi
Janusz Sobieraj - 28 LO

Przykład sceny rysowanej w rzucie perspektywicznym

Wyobraźmy sobie, że chcę pokazać widok drogi (szosy) np z pozycji kolarza, który ucieka z peletonu i zmienia tor jazdy by zgubić innego kolarza siedzącego mu "na kole".

Taki efekt zwykle uzyskuje się w ten sposób, że zmieniamy w specjalny sposób położenie całej sceny, gdy tymczasem "odbiorca" niezmiennie zajmuje położenie obserwatora tzn jego pozycja ma współrzędne (0,d,0).

U nas scena jest prosta - "składa" się z latarni na poboczach i linii środkowej drogi. Wiedza o scenie (współrzędne podstaw latarni po lewj stronie) będzie zgomadzona w tablicy double w[20], procedura scena poprzez zmienne xp i y zapewni możliwość zmiany projekcji w wątku animacyjnym np.

A teraz rysujemy scenę (która jest "pamiętana" w tablicy w[]
void rysuj(Graphics g) 
{ 
  for(int i=0;i<20;i++)
  {
    //lewa strona jezdni 
   p_.kursor(g,w[i]);
   p_.kreska(g,p_.p3d(w[i].x,w[i].y,w[i].z+7));
    // prawa strona jezdni
   p_.kursor(g,p_.p3d(w[i].x+9,w[i].y,w[i].z));
   p_.kreska(g,p_.p3d(w[i].x+9,w[i].y,w[i].z+7));
    // linia środkowa
   p_.punkt(g,p_.p3d(w[i].x+4.5,w[i].y,w[i].z));
  }

- patrz scena()):
pkt3d w[]=new pkt3d[20]; 
double xp=-4.5 
for(int i=0;i<20;i++) 
   w[i]=new pkt3d(0,0,0); 

void scena(double y,double xp) 
{double g; 
  for(int i=0;i<20;i++) 
   { 
    g=y+(double)(i)*9.8; 
    if(g>45) g=-150+Math.abs(g-45); 
    w[i].war(xp , g, -4); 
   } 
}