[ vahid @ 26.05.2005. 19:23 ] @
Evo zadatka:
Code:

#include <iostream.h>
#include <math.h>
  
class tacka
   {
     float x,y;
     public:
       void inic(float a,float b)
           {
              x=a;
              y=b;
           }
        void translacija(float dx,float dy)
           {
              x+=dx;
              y+=dy;
           }
        void pozicija ()
           {
            cout<< "x=" <<x<< " " <<"y="<<y<<endl;
           }
        void simetrija()
           {
              x=-x;
              y=-y;
           }
        void rotacija (float a)
           {
             float xr,yr;
             xr=x*cos(a)-y*sin(a);
             yr=y*cos(a)+x*sin(a);
             x=xr;
             y=yr;
           }  
    };

 void main()
 {
   tacka t1,t2;
   float x1,y1;


 const float pi=3.14159;
 cout<<"Unesite x-koordinatu tacke -->";
       cin>>x1;
       cout<<"Unesite y-koordinatu tacke-->";
       cin>>y1;
       t1.inic(x1,y1);
       t1.translacija(5.5,5.5);
       t1.pozicija();
       t1.simetrija();
       t1.pozicija();
       t1.rotacija(pi/2);
       t1.pozicija();


 }



Ovaj zadatak kad unesemo kordinate tacke on nadje poziciju, odredi translaciju simetriju i rotaciju sve u odnosu na kordinatni pocetak. Sta treba da promenim da sve ove funkcije radi u odnosu na neku tacku a ne na kordinatni pocetak?
[ dragansm @ 26.05.2005. 19:57 ] @
Izmene:
float x,y;
float x_offset, y_offset;

void setOffset(float a,float b)
{
x_offset=a;
y_offset=b;
}

void simetrija()
{
x=x_offset-x;
y=y_offset-y;
}
void rotacija (float a)
{
..=(x-x_offset)*cos(a)-(y-y_offset)*sin(a);
..=(y-y_offset)*cos(a)+(x-x_offset)*sin(a);
}
t1.inic(x1,y1);
t1.setOffset( 10.0f, 10.0f );
t1.translacija(5.5f,5.5f);
[ vahid @ 27.05.2005. 21:34 ] @
Hvala.
Posto meni nije bio bas jasan princip rada onog prvog zadatka. Znacilo bi mi malo objasnjenje:
Ovo x/y_offset su kordinate koje tacke? (te druge nove ili prve)
Za koju tacku ja unosim kordinate?
[ dragansm @ 28.05.2005. 07:08 ] @
Ispravka (na rezultat transformacija je trebalo dodati (x_offset, y_offset))
Code:

void simetrija()
{
x=x_offset + (x_offset-x);
y=y_offset + (y_offset-y);
}

void rotacija (float a)
{
..=x_offset + (x-x_offset)*cos(a)-(y-y_offset)*sin(a);
..=y_offset + (y-y_offset)*cos(a)+(x-x_offset)*sin(a);




Citat:

Ovo x/y_offset su kordinate koje tacke? (te druge nove ili prve)

Promenljive x_offset, y_offset sadrze zeljenu translaciju (pomeraj) koordinatnog sistema pri transformacijama rotacije i ogledala.

Citat:

Sta treba da promenim da sve ove funkcije radi u odnosu na neku tacku a ne na kordinatni pocetak?

(x_offset, y_offset) je "neka tacka".

Citat:

Za koju tacku ja unosim kordinate?

Code:

t1.inic(0,0);                   x = 0, y = 0, x_offset = ?, y_offset = ?
t1.setOffset( 10.0f, 0.0f );    x = 0, y = 0, x_offset = 10, y_offset = 0
t1.translacija(11,0);           x = 11, y = 0, x_offset = 10, y_offset = 0
t1.simetrija();                 x = 9, y = 0, x_offset = 10, y_offset = 0
t1.rotacija(pi/2)               x = 10, y = -1, y = 0, x_offset = 10, y_offset = 0

Pokusaj za neki drugi par translacije i offseta, ali mislim da je sad OK.
[ vahid @ 28.05.2005. 22:58 ] @
Code:

Unesite x-koordinatu tacke -->0
Unesite y-koordinatu tacke-->0
x=11 y=0
x=9 y=0
x=9.999999 y=-9.536743e-07


to je resenje za
Code:

t1.inic(x1,y1);
t1.setOffset( 10.0f, 0.0f );
t1.translacija(11,0);
t1.rotacija(pi/2);



drugo:
Code:

Unesite x-koordinatu tacke -->1
Unesite y-koordinatu tacke-->1
x=3 y=3
x=-1 y=-3
x=3.999997 y=2.999994


za:
Code:

t1.inic(x1,y1);
t1.setOffset( 1.0f, 0.0f );
t1.translacija(2,2);
t1.rotacija(pi/2);


mislim da sam shvatio ocemu se radi u ovom zadatku. cudno mi je bilo kako za unos jedne tacke program "sam odredju" onu tacku na osnovu koje izvrsava zadate operacije. Sad vidim di je problem. Mislio sam da je ono (5.5f , 5.5f) samo definisanje broja oblika 00000.00000 float .

Hvala,hvala,hvala za objasnjenje.