Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C++ sitan problem

[es] :: C/C++ programiranje :: C++ sitan problem

[ Pregleda: 3289 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.vdial.verat.net.

Sajt: www.vaha.net


Profil

icon C++ sitan problem26.05.2005. u 19:23 - pre 228 meseci
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?

vaha.net
 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
212.200.125.*



Profil

icon Re: C++ sitan problem26.05.2005. u 19:57 - pre 228 meseci
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);
 
Odgovor na temu

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.vdial.verat.net.

Sajt: www.vaha.net


Profil

icon Re: C++ sitan problem27.05.2005. u 21:34 - pre 228 meseci
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?
vaha.net
 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
212.200.125.*



Profil

icon Re: C++ sitan problem28.05.2005. u 07:08 - pre 228 meseci
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.
 
Odgovor na temu

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.vdial.verat.net.

Sajt: www.vaha.net


Profil

icon Re: C++ sitan problem28.05.2005. u 22:58 - pre 228 meseci
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.
vaha.net
 
Odgovor na temu

[es] :: C/C++ programiranje :: C++ sitan problem

[ Pregleda: 3289 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.