Lokalna pozycja z obiektów o globalnym położeniu

0

Witam, ćwicząc swoje umiejętności programistyczne natknąłem się na pewien problem a dokładnie mówiąc chodzi mi o wykrywanie lokalnej koordynaty globalnego obiektu na mapie 2d,
chciałem zaimplementować algorytm wyszukiwania najkrótszej drogi dla wybranej części mapy, do tego celu utworzyłem dwuwymiarową tablicę wartości boolowskich aby odzwierciedlić
położenie obiektów i czy można przez nie przechodzić. Problem zaczyna się gdy chcę obliczyć położenie tych obiektów na tej tablicy ale dla określonego wycinka mapy.
Poniżej przykłady pozycji obiektów względem środka i całej mapy
https://1drv.ms/x/s!ApmpJKqDElpEiK4TcqOjWAsUcO2JPg

Próbowałem analizować zależności wartości, wymyślić jakiś algorytm jak to przeliczać lecz nic mi nie świta.
W tym miejscu prośba do Was, proszę o nakierowanie w jaki sposób mam to przeliczać :)
Z GÓRY WIELKIE DZIĘKI!!!!

0

W Twoim przykłądzie skala jest ta sama, więc:

x lokalne = x globane - x lewego gornego rogu mapy
y lokalne = y globane - y lewego gornego rogu mapy

i poza tym tylko sprawdzasz czy lokalne współrzędne się mieszczą w mapce...

PS. W przypadku 1 masz błąd, powinno być 9x3 zamiast 10x3, a w przypadku 3 powinno być 8x7 zamiast 9x7 -- może to utrudniło CI analizę? :)

0

zapomniałem napisać że problem już rozwiązałem, dokładnie jak Ty to rozwiązałem
wklejam całą metodę gdzie miałem problem związany z tym tematem :)

void CollisionChecker::getMapCollisionGridOnVisibleArea(std::vector<std::shared_ptr<Entity>> &mapEntity) {
    //restarting grid
    for (int i = 0; i < 320; i++) {
        for (int j = 0; j < 180; j++) {
            gridMap[i][j] = false;
        }
    }
    for (int i = 0; i < mapEntity.size(); i++) {
        if (mapEntity[i]->getPositions().x > mapEntity[0]->getPositions().x - 600 &&
            mapEntity[i]->getPositions().x < mapEntity[0]->getPositions().x + 600 &&
            mapEntity[i]->getPositions().y < mapEntity[0]->getPositions().y + 300 &&
            mapEntity[i]->getPositions().y > mapEntity[0]->getPositions().y - 300 &
            mapEntity[i]->isCollisionAble() != CAN_BE_COLLIDET) {

            int startX, endX, startY, endY;
            startX = (static_cast<int>(mapEntity[i]->getPositions().x-(mapEntity[0]->getPositions().x-640) ) / 4) - 1;
            endX = static_cast<int>(mapEntity[i]->getPositions().x + mapEntity[i]->getSize().width -(mapEntity[0]->getPositions().x-640)) / 4;
            startY = (static_cast<int>(mapEntity[i]->getPositions().y-(mapEntity[0]->getPositions().y-360)) / 4) - 1;
            endY = static_cast<int>(mapEntity[i]->getPositions().y + mapEntity[i]->getSize().height -(mapEntity[0]->getPositions().y-360)) / 4;
            if (startX < 0) {
                startX = 0;
            }
            if (startY < 0) {
                startY = 0;
            }
            if (endX > 319) {
                endX = 319;
            }
            if (endY > 179) {
                endY = 179;
            }
            for (int j = startX; j <= endX; j++) {
                for (int k = startY; k <= endY; k++) {
                    gridMap[j][k] = true;
                }
            }
        }
    }
}

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