Szóval kéne írnom egy progit C++ -ban ami kirak egy ablakot és abban rajzol egy négyzetet, amiben egy labda pattog, úgy hogy a falról rendesen visszapattan meg minden. Meg is írtam a progit, csak ugye átdolgoztam hogy állítható legyen a kezdés helye pixelben (szal ahonnan indul a labda), illetve a szög amiben elindul a labda. És itt jön a progbléma.. Vannak bizonyos szögtartományok amiknél a labda kilép a baloldali illetve a felső kereten. 4 ilyen szögtartomány 4*60 fok szal összesen 240 fok. A maradék 120 fokban megy rendesen, de így ugye 2szer akkora az a tartomány ahol nem jó, mint ahol jó, és nem látom a megoldást. A lebda mozgását így oldottam meg:
m_vy++;
m_vx++;
m_x=m_x2+m_ex*m_vx*(cos(m_alfa*pi/180));
m_y=m_y2+m_ey*m_vy*(sin(m_alfa*pi/180));
dc.Ellipse(m_x-10,m_y-10,m_x+10,m_y+10);
if (m_y<Ys+12) {m_ey*=-1; m_y2=m_y; m_vy=1;}
if (m_x>Xs+Xh-12) {m_ex*=-1; m_x2=m_x; m_vx=1;}
if (m_y>Ys+Yh-12) {m_ey*=-1; m_y2=m_y; m_vy=1;}
if (m_x<Xs+12) {m_ex*=-1; m_x2=m_x; m_vx=1;}
Ahol m_x2 / m_y2 a kiindulási pont ahonann elindul a labda, ezeket egy edit boxból kéri be. az m_vx, és m_vy x és y irányú komponensek, tulajdonképpen csak szorzók amikkel a következő pontot számolja. m_alfa pedig a szög, de cos, sin függvények radiánban kérik ezért kell m_alfa*pi/180. m_ex, m_ey, pedig csak előjel szorzók, alapból 1 az értékük, így tulképpen ütközés után csak a mozgás valamelyik irányú komponensének előjelét fordítják. mivel csak felül és baloldalt lép ki, az 1. és az utolsó feltételben lehet a hiba csak nemtudom hogy mi. Fontos lenne, mert hétfőre le kéne adnom a progit egyetemen, szal segítsetek plíz!
Szerk: jah ami kimaradt: Ys, Xs, a négyzet bal felső sarkának koordinátái amiben pattog(na) a labda. Xh, Yh, pedig a négyzet adott irányú hosszúsága..
[Szerkesztve]
Szabadság, szerelem, Ext2 kell nekem.