Sposób obliczania kolizji

0

Czy taki sposób obliczania kolizji jest poprawny i powinien działać?

class Object2D {
public:
	float x, y;
	float w, h;
public:
	Object2D() : x(0.0f), y(0.0f), w(0.0f), h(0.0f) { }
	Object2D(float _x, float _y, float _w, float _h) : x(_x), y(_y), w(_w), h(_h) { }
	~Object2D() { }
};

class AABB {
public:
	static bool check(const Object2D& a, const Object2D& b) {
		if(fabs(a.x - b.x) < (a.w/2 + b.w/2) && fabs(a.y - b.y) < (a.h/2 + b.h/2)) return true;
		return false;
	}
}

dodanie znacznika <code class="cpp"> - fp

0

Nie za bardzo rozumiem sens trzymania oddzielnej klasy dla Object2d, skoro mozna wszystkie dane upchnac do aabb ;)
Dodaktowo po jakiego Ci floaty skoro nie wyrenderuje sie nic z dokladnoscia wieksza niz do uinta/inta w zaleznosci od ukladu.
Pozwole sobie wrzucic jakis moj kod stary, ktory udostepnialem na forum:

struct Position
{
    int x;
    int y;
};
 
class AABB
{
public:
    AABB(Position min, Position max):
        min(min),
        max(max)
    {
        ;
    }
 
    friend bool checkCollision(const AABB& first, const AABB& second)
    {
        return (!(first.min.x > second.max.x || first.min.y > second.max.y ||
                  first.max.x < second.min.x || first.max.y < second.min.y));
    }
 
private:
    Position min;
    Position max;
}; 
0

@n0name_l Dobra, ale co to jest position min i max i dlaczego tu nigdzie nie ma długości i szerokości? :)

0

Nie jest potrzebna do zdefiniowana prostkokata na plaszczyznie. Tak ten aabb bardziej intuicyjnie wyglada bo przedstawia wszystko co jest potrzebne do obliczenia bez zajmowania sie rzeczami typu x+w<blablabla.

obrazek.png

0
n0name_l napisał(a):

po jakiego Ci floaty skoro nie wyrenderuje sie nic z dokladnoscia wieksza niz do uinta/inta w zaleznosci od ukladu.

Ponieważ jest to gra (przynajmniej tak wynika z tematu, skoro mowa o kolizjach), może się okazać, że np. prędkość poruszania się obiektu jest równa 0.1. W takim wypadku, zwiększanie położenia X typu int o 0.1 nigdy nic nie zmieni, zaś jeśli X będzie typu float, to co 10 "przesunięć" obiekt przesunie się o 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1