Diskuze: odrazenie gulicky
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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.
No aj ja som tak myslel ale neviem prist nato jak by som mohol ten uhol vypocitat
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.
Nevies ci je tu na devbooku nejaky tutorial k vektorom a uhlom
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.
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;
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
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.
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.
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);
Zobrazeno 12 zpráv z 12.