Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 03. 11. 2012 10:15

Merin
Zelenáč
Příspěvky: 10
Reputace:   
 

Matlab - Nalezení správné cesty v bludišti

Zdravím,
mám ve škole projekt, kdy mám do Matlabu implementovat algoritmus, který automaticky nalezne správnou cestu bludištěm. Od vyučujících mám gifko bludiště, mám ho nahrané v Matlabu ve formátu double. A to je tak všechno :(
Našla jsem na webu algoritmus vlny (http://www.devbook.cz/algoritmus-sireni … v-bludisti), který se mi líbí a který vyučující schválil. Jenže já nemám s Matlabem téměř žádné zkušenosti (zejména ne v psaní takovýchto skriptů) a vůbec nevím, jak postupovat při implementaci. Klasicky jsem za pomoci Googlu prohledala weby v cestine i anglictine a... nemám prostě nic :(

Má představa je následující:
-> vezmi počáteční pixel, prověř pixely v řádku nad a pod a ve sloupci vlevo a vpravo (šíření je možné do 4 směrů, po diagonále nejde chodit), jsou- li černé, nedělej nic, jsou-li bílé přiřaď jim číslo 1. Pak se posuň na jedničku, zase to prověř a přiřaď číslo o jedna větší než je to, na kterém stojíš. Atd. Taky bych ráda, aby se cyklus (bude to cyklus?) nezdržoval vracením se.

Jenže já nevím, jak vyvolat souřadnice počáteční pixelu a říct, že od tama se vychází, nevím jak říct, že na černém poli se nic nedělá a na bílá se přiřazují čísla... nevím jestli vytvořit nějakou "náhradní mapu" kam by se čísla přímo vepisovala... :-/ Jinými slovy nevím nic :-( A čas se krátí.

Nakopne mě někdo správným směrem?

P.S. To gifko bludiště je černo-bílé (0-1) a cesty jsou stejne jako steny 1 pixel široké.

Offline

 

#2 04. 11. 2012 19:51 — Editoval RePRO (04. 11. 2012 19:51)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Matlab - Nalezení správné cesty v bludišti

Zdravím,
vím, že (asi) nepomůžu... ale tak co třeba v rychlosti si přečíst základy?
Třebas tu.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 05. 11. 2012 12:26

Merin
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ RePRO:
Díky :-) Tenhle text jsem nasla a prohlizela... k necemu byl, ale problem nevyresen :( Ale dekuju!

Offline

 

#4 05. 11. 2012 19:03

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ Merin:

Matlab je "maticová kalkulačka". Preto sa mi ako dobrý začiatok javí nahrať pixely z gifka do matice. Napríklad reprezentované 0 a 1.
Algoritmus bude teda bežať nad maticou. Ten algoritmus vlny som si nepozeral, ale ako základ sa mi vidí vhodná rekurzia. To by mohla byť odpoveď na to, či to má byť cyklus. To znamená cyklus nie, ale rekurzia áno. Bludiská sú určite vhodné na rekurziu.

Offline

 

#5 06. 11. 2012 17:01

Merin
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ etchie:
Mám to přesně tak. Mám obrázek, nahranej v Matlabu jako matici 1 a 0. No jenže to je tak asi všechno co mam... a zatim se obavam, ze moc nepokrocim.

Offline

 

#6 11. 11. 2012 00:19

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ Merin:

ten algoritmus šírenia vlny je dobrý. v ňom je ukázané celé riešenie. stačí to prepísať do programu. aj keď to tam možno nevidno na prvý pohľad, tak vlastne obsahuje mnou spomínanú rekurziu. jediné čo potrebuješ upraviť je, aby stena bludiska nebola reprezentovaná kladným číslom. tie totiž používa algoritmus vlny. preto miesto 1 použi napr. -1.
tiež je potrebné stanoviť si nejaký vstupný bod, kde sa vstupuje do bludiska a tiež stanoviť kedy sa bludisko považuje za prejdené. t.j. výstupný bod. rekurzia musí mať stanovenú podmienku ukončenia (nájdený výstupný bod) inak sa rekurzia zacyklí a spotrebuje všetku pamäť a program spadne. vstupný bod môže byť vždy fixný napr. [1,1] a východ z bludiska môže byť buď fixný (napr. protiľahlý roh) alebo gif súbor može niesť aj info kde je východ. takýto bod by bol v matici reprezentovaný napr. ako -2.
v programovaní je definícia vstupných podmienok na riešiteľovi, ak teda nie sú súčasťou zadania (čo často nie sú).

Offline

 

#7 11. 11. 2012 11:17

Merin
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ etchie: Vis ty co, toto ja jakoby vim... (ale kazdopadne dekuju za pripomnky), ale ja prave nevim JAK to IMPLEMENTOVAT do Matlabu. Predstav si, ze te posadi k programu, který jsi defacto NIKDY nevidel a reknou ti at napises skript, ktery najde cestu z bludiste. A ty JEDINÉ co mas je gifko bludiste. Algoritmus relativne vymyslis/najdes/cokoli. Ale ja nvm, jak napsat tu rekurzi. Ani jak poradne osefovat, aby nelezl do sten a milion dalsich veci.

Offline

 

#8 11. 11. 2012 12:43 — Editoval etchie (11. 11. 2012 14:50)

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: Matlab - Nalezení správné cesty v bludišti

↑ Merin:

ak máš obrázok nahraný v matlabe v matici, tak predpokladám, že vieš zapísať do prvku matice a rovnako z matice niečo načítať. ak nie tak fakt doporučujem prečítať základy ako píše hore RePRO.

čo sa týka kontroly hraníc a stien tak na to slúžia podmienky ako v ktoromkoľvek inom jazyku. stenu skontrolujem tak, že obsahom bunky matice je číslo -1. ak tam je stena tak tam neleziem. ide o klasické vetvenie IF ...ELSE.
aby som neliezol mimo maticu, tak potrebujem aj údaje o jej rozmeroch a teda indexy pre prístup na maticu budem kontrolovať voči maximálnym a minimálnym prípustným hodnotám. inak by sa program snažil pristúpiť na neexistujúci prvok a skončil by v chybe.
dôležité je uvedomiť si, že matlab indexuje matice od jednotky. bežné iné programovacie jazyky začínajú nulou. na to treba pamätať.
rekurzia je funkcia ktorá volá vo svojom vnútri samú seba.

funkcie sa v matlabe umiestňujú do samostatného m súboru, kde meno súboru je zároveň menom funkcie.
hlavný program teda bude volať funkciu a tá funkcia vo svojom vnútri zas samu seba.


Code:

clc; clear all;

A=zeros(5,4);
x=1; y=2;
A(x,y)=-1;
x=x+1;
A
fprintf("Pozicia [%d,%d] ",x,y);
if (A(x,y) ~= -1)
disp('nie je tu stena')
else
disp('je tu stena')
end

tu je krátka ukážka kódu pre manipuláciu s maticou. ale fakt je nevyhnutné si prečítať základy a pozerať do referenčnej príručky ako sa ktorý príkaz používa.
kód vytvorí maticu 5x4 naplnenú nulami. na pozíciu 1,2 zapíše zápornú hodnotu a presunie sa na pozíciu 2,2 kde kontroluje obsah bunky.

Ešte som sa chcel opýtať, či by si to vedela naprogramovať v inom jazyku ?
Ak je problém s rekurziou, doporučujem si cvične naprogramovať výpočet faktoriálu. Matematická definícia faktoriálu je rekurzia. V hocijakom jazyku to bude to isté čo v matlabe. Jedine syntax a forma sa môže líšiť, ale podstata ostáva.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson