Robot a szobában

Posted by | · · · | Cégélet · Webstar Works | Nincs hozzászólás a(z) Robot a szobában bejegyzéshez

A szögfüggvények ismerete nem hátrány.

Készülő játékunk kapcsán egy érdekes problémába ütköztem. A főszereplő nevét és a helyszínt megváltoztattam a személyiségi jogok miatt…

Alaphelyzet

“Mr. Robot” egy téglalap alakú “szobában” mozog. Nem tud megállni, csak előre tud haladni, és csak bizonyos íven tud megfordulni. Mr. Robot nem mehet neki a falnak. Mr. Robot minden egységnyi lépés után újraszámolja annak irányát, hogy merre fog továbbhaladni.

Haladási szabály

Az új irány három paramétertől függ:

  1. véletlen (-1.0 – +1.0)
  2. előző lépéskor jobbra vagy balra tartott, vagy egyenesen ment (-1.0, 1.0 vagy 0.0
  3. erőltetett kanyarodási szög (-1.0 – +1.0 között fokozatosan változva, majd ugyanez vissza)

A végleges kanyarodási szög ezek összege, tehát -3.0 <= szög <= +3.0.

Ha Mr. Robot a paramétereket külön-külön alkalmazza, akkor a következő utakat tenné meg:

mrrobot

Azonban ha mindet alkalmazza, akkor kellemesen kacskaringós úton fog haladni:

mrrobotfinal

A probléma

A probléma akkor merül fel, amikor falközelbe ér. Ekkor megváltozik a szabály, hiszen a falnak nem mehet neki. Első ötletem az volt, hogy ha Mr. Robot a fal felé tart, akkor elterelem onnan, vagyis a kanyarodási szöget úgy növeltem vagy csökkentettem, hogy minél hamarabb elforduljon a fal felől. Ehhez egyszerű távolságmérést alkalmaztam: ha túl közel volt a falhoz, akkor fordult. Azonban a sarkokban versenyhelyzet alakult ki a két fal között, ezért Mr. Robot folyamatosan próbált mindkét faltól elfordulni, aminek az lett az eredménye, hogy nekiment a falnak. A megoldást a szögfüggvények alkalmazása jelentette. Ezekkel sokkal finomabban lehet kiszámolni, hogy pontosan mikor van szükség beavatkozásra – így akár egész közel is mehet a falhoz, mielőtt terelésre lenne szükség. A versenyhelyzetet szintén sikerült feloldani.

A megoldás

Az alábbi ábrán látható a -20°-os irányszög elemzése, Mr. Robot észak-északkelet felé halad éppen, és közelít a szoba északkeleti sarkához. (Az irányszög függvényében a szobának mindig csak egy részét kell vizsgálni.)

allowedarea

Abban az esetben, ha Mr. Robot a faltól fordulókör-átmérő (d) távolságon belülre kerül, megvizsgálja, hogy haladhat-e tovább a fenti szabályok szerint, vagy bele kell-e kezdenie a vészkanyarodási forgatókönyv megvalósításába, mely három esetben történhet meg:

  1. (Kék és sárga nyíl) Ha Mr. Robot közel kerül a sarokhoz, vagyis ha az északi faltól való távolsága (vPos) kisebb, mint vFar, ÉS a keleti faltól való távolsága (hPos) kisebb, mint hFar, akkor a kanyarodás iránya attól függ, hogy Mr. Robot a kék vagy a sárga szakaszhoz van közelebb.
    Ennek megállapításához a következőre van szükség:
    ((hFar – hPos) / absSinAngle < (vFar – vPos) / absCosAngle)
    Amennyiben a feltétel igaz, a kék szakaszhoz volt közelebb Mr. Robot, ezért jobbra fog fordulni a következő lépésben. Ha hamis a feltétel, akkor a sárga szakaszhoz volt közelebb, ezért balra fog fordulni.
  2. (Zöld nyíl) Ha az északi falhoz közelebb kerül, mint vNear, akkor jobbra fog fordulni.
  3. (Piros nyíl) Ha a keleti falhoz közelebb kerül, mint hNear, akkor balra fog fordulni.

Az eredmény

Ha egyik feltétel sem teljesül, akkor Mr. Robot arra fordul, amerre akar, mert még nincs a veszélyes zónában.
Mr. Robotot sokáig követve ezen a területen mozgott, látható, hogy ügyesen alkalmazta a vészkanyarodási forgatókönyvet:

mrrobotlong


No Comments

Leave a comment