Zkouším takovou malou herní blbůstku. Mám problém s kolizemi - jsou nepřesné.
Každý objekt mám ohraničený a vyšrafovaný úsečkami. Úsečku mám definovanou úhlem a délkou, jelikož objekty ve hře hodně rotuju. Začátek úsečky mám definovaný další úsečkou, která začíná ve středu, nebo určeném bodu na objektu.
Převod ze 2 bodů na úsečku mám následovně(je to pouze útržek kódu ve kterém by mohla být chyba, ošetření vykročení z intervalu 90 ° tady nedávám):
delka = sqrt(x*x + y*y);
uhel = (atan(x/y)*pi/180;
Vím, že je zbytečné převádět úhel na stupně, ale mám to pro potřeby debugování apod.
Převod z úsečky na bod [0;0] a druhý bod:
x = delka * sin(u*180/pi);
y = delka * cos(u*180/pi);
A kolizi počítám následovně:
double t1 = (u.x*(A.y-C.y)-u.y*(A.x-C.x))/(u.y*v.x-u.x*v.y);
double t2 = (v.x*(A.y-C.y)-v.y*(A.x-C.x))/(u.x*v.y-uv.y*v.y);
if(t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1)
u je směrový vektor první úsečky definované body A a B, v je směrový vektor druhé úsečky definované C a D
Už nevím, kde by mohla být chyba, a nedávno se tu řešila nepřesnost, tak bych se chtěl zeptat, zda-li to může být nepřesností funkcí a nebo je chyba někde, jinde, kterou jsem přehlédl.
Předem děkuju za odpověď