Găsirea calea pe hartă

Găsirea calea pe hartă

Tema de a găsi o modalitate de a cartografia griji mulți programatori de joc (mai ales incepatori), dar chiar și programatori cu experiență face algoritmii lor nu sunt foarte mobili. Aici, am descrie niște algoritmi pentru a găsi calea. Luându-le ca bază, puteți veni cu o mulțime de algoritmi destul de avansați. Din păcate, nu există nici un algoritm perfectă, și, prin urmare, de dragul de a folosi unul sau altul este obligat să sacrifice fie performanța sau intelectul, care este suficient de mic pentru a avea nevoie de ea.

Jocurile folosesc adesea un algoritm de rutare (sau modificarea acestora) datorită punerii sale în aplicare simplă și o cantitate mică de calcule. Dar este foarte multe ori nu strabatyvaet într-o situație de joc complexă și caracterul începe să se zbatea dintr-o parte în alta, astfel iritant player-ul (de exemplu, în jocul lui StarCraft). Aplicarea algoritm val poate obține rezultate mai bune, dar algoritmul de undă pentru utilizare în jocurile necesită un pic de îmbunătățire, deoarece nu se poate construi o linie diagonală. Desăvârșirea poate fi combinat val și calea manevrabilității prin tratarea 8-cartier în jurul frontal val elementar în construcția pistei. Doar aici calculele sunt un pic mai puțin, deoarece camera frontală unde are deja o distanta de la elementul inițial, atunci puteți pur și simplu să selectați cel mai mic element din vecinătate și să promoveze drumul spre el. Cu toate acestea, indiferent de modul în care algoritmul val universal, a fost nu numai un mare dezavantaj pe persoana - este nevoie de cantități mari de memorie pentru stocarea de carduri auxiliare pentru a val fronturi și un drum lung pentru a construi pentru fiecare caracter. Pentru a reduce costurile, eu folosesc personal cartela calculat deja fronturile de unda pentru toate caracterele care vin la un singur punct, reducând astfel timpul de calculare a traseului pentru fiecare dintre ele.

Algoritmul Wave (Algoritmul Li)

Algoritmul Wave este unul dintre algoritmii de rutare cele mai unice. Acesta vă permite să construiască o rută (cale) între cele două elemente, în orice labirint.

Din celula inițială răspândire în 4 direcții de undă (figura 1.). Un element care formează partea din față a venit un val volny.Na fronturi val figura numărul sunt numerotate.

Fiecare element al primului frontul undei este o sursă secundară de undă (Figura 2). Elemente de al doilea Wavefront genera al treilea fronturi valurilor etc. Procesul continuă până când nu se ajunge la nici un element final.

În a doua etapă este construit circuitul în sine. Construcția sa este realizată în conformitate cu următoarele reguli:
  1. Mișcarea în construcția pistei, în conformitate cu prioritatea selectată.
  2. Atunci când se deplasează de la elementul de capăt la camera inițială val frontal (coordonate de deplasare) ar trebui să scadă.

Prioritățile indicații rutiere sunt selectate în faza de proiectare. În funcție de ceea ce a seta aceste priorități sunt obținute de cale diferită, dar lungimea liniei, în orice caz, rămâne același.

Algoritmul Avantaje val este că acesta poate fi folosit pentru a găsi o cale în orice labirint și orice număr de elemente interzise (pereți). Singurul dezavantaj al acestui algoritm este faptul că în construcția liniei necesită o cantitate mare de memorie.

Exemplu algoritmului de undă:

Red marcate articole interzise. urmări Gray după acțiunea algoritmului.
Un punct de plecare, B-finala.
Priorități LEFT mișcare, dreapta, sus, jos.
Construirea pistei este de la punctul de început până la sfârșit. Prioritățile sunt indicate cu săgeți verzi.

algoritmul de rutare

Algoritmul de rutare are două variante.
  • Pe baza calculului distanțelor dintre puncte.
  • Pe baza relației recursiv.

Algoritmul de rutare devine numele său, deoarece osuhestvlyaet atât formarea de față și de stabilire a undei trassy.Istochnikom la fiecare pas este secțiunea finală a elementului de rută stabilite în etapele anterioare.

Algoritmul de rutare se bazează pe calcularea distanței dintre puncte.

Algoritmul de lucru pornește de la un element inițial. Astfel, au văzut în jurul valorii de primar cartier de celule element de 8. Din vecinătatea fiecărui element la calea finală estimată lungimea elementului. Distanța dintre punctele vychisletsya prin formula:

D = | X i X B | + | Y i -Y B |

unde (X i, Y i) - Coordonate cartier. (X B, Y B) - Coordonatele elementului finit.

Astfel, opt valori calculate din care este selectat minimum. Element de la care distanța a fost minimă este selectată ca element de urmărire. În jurul ei este din nou considerată 8 vecinătate celulară. Procesul continuă până când nu se ajunge la nici un element final. În cazul în care calea întâlnește un obstacol sub forma unui element interzis, evitarea obstacol se realizează pe baza intuiției dezvoltator. Aceasta stabilește direcția de evitare a obstacolelor.

Algoritmul de rutare bazat pe relația recursiv.

Algoritmul de rutare poate fi construit pe baza următoarei relații recursiv:

y (x) = 2y (x + h) + y (x + 2h) + d

Acolo unde x, y (x) - ordonată și abscisa elementul ocupat pistă în această etapă.
(X + h) - ordonata a elementului ocupat pista în etapa anterioară.
(X + 2h) - ordonata membrului distanțată de calculat la pasul 2.
h - abscisa schimbarea valorii la fiecare pas.
d (delta) - Această funcție determină tipul rutei. În cazul în care d = 0 este construit linie dreaptă, în cazul în care d = const apoi a construit o cale parabolică.

Ordoneze elementul următor piesa se calculează recursiv conform formulei, iar abscisa traseul calculat prin formula:

Semnul „+“ sau „-“ în formula selectată recursiv pe baza ordinului pornește de la construcția căii, de la un element inițial „+“, respectiv, și de la finala „-“.

În conformitate cu această formulă pentru a calcula al treilea element al pistei trebuie să cunoască două. Primul element este elementul inițial al A (X A, Y A), iar ordonata al doilea element se calculează cu formula:

Y (X) = Y (X A) + ((Y (X A) -Y (X B)) / (X-X A B)) * h

În cazul în care pe cale de a satisface elementul său de by-pass interzis se face pe baza intuiției dezvoltator.
Avantajul principal este simplitatea algoritmului de rutare, precum și posibilitatea de mișcare pe diagonală.