IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
RooBoo
Člen
Avatar
RooBoo:26.3.2014 8:39

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
rawen
Člen
Avatar
Odpovídá na RooBoo
rawen:26.3.2014 9:52

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
rawen
Člen
Avatar
Odpovídá na RooBoo
rawen:26.3.2014 10:05

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 rawen
RooBoo:26.3.2014 10:12

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:26.3.2014 10:17

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:26.3.2014 10:27

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

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

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
rawen
Člen
Avatar
Odpovídá na RooBoo
rawen:26.3.2014 10:48

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:26.3.2014 10:50

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:26.3.2014 12:52

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
rawen
Člen
Avatar
Odpovídá na 1Pupik1989
rawen:26.3.2014 13:24

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 rawen
1Pupik1989:26.3.2014 13:56

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.