Avatar
RooBoo
Člen
Avatar
RooBoo:

Ahojte .. ako by som vedel spravit odrazenie vykreslenej gulicky ak by sa dostala na okraj pictureboxu... snad ma chapete :)

 
Odpovědět 26.3.2014 8:39
Avatar
rwn
Člen
Avatar
Odpovídá na RooBoo
rwn:

Mohl bys to udělat tak, že když znáš pozici [x,y] kuličky, tak pokud by se kulička dostala na jednu z těchto čtyř souřadnic [pictureBox1.Width, cokoliv] || [cokoliv, pictureBox1.Height] || [cokoliv, 0] || [0, cokoliv], tak by se udělal odraz. Samozřejmě by to chtělo si pamatovat nějakou předchozí pozici před odrazem, aby se dal vypočítat úhel odrazu. :)

Nahoru Odpovědět 26.3.2014 9:52
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
rwn
Člen
Avatar
Odpovídá na RooBoo
rwn:

Nebo vlastně přesněji mít nějakou private proměnnou X a Y. Pokud se X bude rovnat pictureBox1.Width nebo 0; popřípadě Y se bude rozvnat pictureBox1.Height nebo 0, tak se zavolá nějaká metoda Odraz.

Nahoru Odpovědět 26.3.2014 10:05
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
RooBoo
Člen
Avatar
Odpovídá na rwn
RooBoo:

No aj ja som tak myslel ale neviem prist nato jak by som mohol ten uhol vypocitat

 
Nahoru Odpovědět 26.3.2014 10:12
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na RooBoo
1Pupik1989:

Můžeš si přidat privátní proměnnou určující směr. Může to být buď vektor nebo úhel. Potom budeš detekovat okraj jak psal rwm. Plus tedy musíš přičíst radius kuličky, aby si získal okraj.

 
Nahoru Odpovědět 26.3.2014 10:17
Avatar
RooBoo
Člen
Avatar
Odpovídá na 1Pupik1989
RooBoo:

Nevies ci je tu na devbooku nejaky tutorial k vektorom a uhlom

 
Nahoru Odpovědět 26.3.2014 10:27
Avatar
rwn
Člen
Avatar
Odpovídá na RooBoo
rwn:

Záleží jak máš vyřešené samotné posouvání, pokud bys tedy měl private proměnnou pro X a Y, tak by se daly uděla private proměnné pohybX a pohybY. Pohybovaloby se to X += pohybX; Y += pohybY. S tím, že pokud bys došel například k hraně napravo, tak by se ti změnila hodnota pohybX na zápornou, a pohybY bys klidně nechal. Tímhle by se dalo vyřešit, že úhel dopadu se rovná úhlu odrazu, ale je to teda první co mě napadlo. V podstatě, když se dotkneš horní nebo spodní hrany, tak se ti znaménkově změní pohybY, když se dotkneš levé nebo pravé hrany, tak se ti znaménkově změní pohybX. Myslím, žeby to mohlo fungovat. :`

Editováno 26.3.2014 10:32
Nahoru Odpovědět 26.3.2014 10:30
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
rwn
Člen
Avatar
Odpovídá na RooBoo
rwn:

Myslím, že nějak takhle by to mohlo i snad stačit:

if( X == pictureBox1.Width ||  X == 0)
    pohybX = pohybX * -1;

if (Y == pictureBox1.Height || Y == 0)
    pohybY = pohybY * -1;
Nahoru Odpovědět 26.3.2014 10:48
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na RooBoo
1Pupik1989:

Tady najdeš pohyb z bodu A do bodu B rychlostí R.
http://www.itnetwork.cz/…yb-po-primce#…

Jde vlastně o to, že kulička bude mít pozici, směrový vektor a rychlost.

Odraz pak najdeš tady:
http://www.builder.cz/…to--156047cz

 
Nahoru Odpovědět 26.3.2014 10:50
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:

Nestačilo. Musela by se kulička posunout jen o jeden bod, jinak by vzniklo desetinné číslo a kulička by vyletěla. Chce to porovnávat jako větší menší. Plus počítat i s radiusem kuličky.

 
Nahoru Odpovědět 26.3.2014 12:52
Avatar
rwn
Člen
Avatar
Odpovídá na 1Pupik1989
rwn:

Jj, jasně že větší menší, toho jsem si nevšiml. :) Poloměr kuličky stačí zanést tím, že se nebude odrážet přímo v rámečku, ale před ním ve vzdálenosti poloměru kuličky. :)

if(X >= pictureBox1.Width - R ||  X <= R)
     pohybX = pohybX * -1;

if (Y >= pictureBox1.Height - R || Y <= R)
     pohybY = pohybY * -1;

Kde R je poloměr kuličky.

Nahoru Odpovědět 26.3.2014 13:24
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na rwn
1Pupik1989:

Já to počítal trochu jinak, ale výsledek by se měl shodovat. Jediné co je jinak, že nemusím zjiěťovat do které strany kulička narazila.

uhel = 90 * PI/180;

//Směrový vektor dopadu
normal_x = cos(uhel)
normal_y = sin(uhel);

//Směrový vektor odrazu
odraz_x = cos(-uhel);
odraz_y = sin(-uhel);
Editováno 26.3.2014 13:57
 
Nahoru Odpovědět 26.3.2014 13:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.