Diskuze: Nejlepší způsob pro uchování "3d" pole
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 26 zpráv z 26.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Všude v herním průmyslu se ukládá n-dimenzionální prostor do 1D, indexuješ pomocí matematiky a 1d pole. Důvod je takový, že hledání v souvislém bloku paměti + výpočet indexu je jednodušší než hledání n-krát.
Díky, ale u trojdimenzionálního pole si převod z/do 1D nedokážu pořádně představit, mohl by jsi mi klidně nejavasciptově ukázat jak takové 2x2x2 pole může být zapsané v 1D? Díky
... Já si refreshnul stránku a zmizlo to
umíš reprezentovat 2D v
1D?
že by 1,2,3,4,5,6,7,8 kde
1, je souřadnice 0,0 a 8 pak 2,2
Už jsem přišel na to jak to reprezentovat, ale jak získat z 1D pole souřadnice x y z a naopak?
Jednoduše to přesně nezjistíš. To ale nezjistíš ať máš to pole reprezentováno jakkoliv.
Proč to nemůžu zjistit, v prvním případě při tomto zápisu to nemusím nijak převádět: map[x][y][z] je hodně špatné, když to budu mít tak jak jsem to měl původně?
Ty si uchováváš x,y,z, jen pro get/set to prostě dáš do fce a ona ti zajistí ten převod a vrátí/nastaví potřebnou věc. Já myslel, že se ptáš jak zjistit index z hodnoty na tom prvku.
Ohledně toho co použít. Je to úplně jedno, pracuj s tím, s čím se ti líp pracuje. Až budeš dělat optimalizace, tak využiješ určitě 1D pole.
Pokud máš ve 3D kvádr o délce W, tloušťce D, výšce H, kde W, D, H jsou celá čísla, pak ho můžeš rozdělit na stejně velké krychle o velikosti 1 tak, že pro krychli i na souřadnicích [x, y, z] platí i = x + y * W + z * WD
Pokud máš index i a znáš W, D, pak můžeš vypočítat souřadnice [x, y, z]. WD je počet prvků na jedné úrovni z => j = i % WD je index ve 2D poli na úrovni z (ta je pro index j stejná), takže x = j % W, y = floor(j / W) a pak jen dopočítáš z = floor(i / WD). Nakonec dosadíš j za i a vyjde ti:
x = (i % (WD)) % W
y = floor / W)
z = floor(i / WD)
(Kde floor je funkce, která zaokrouhlí číslo dolů)
Jinak nevidím problém v použití trojrozměrného pole. Dokud nezaznamenáš významný pokles výkonu, nemá podle mě smysl řešit něco jiného.
Všiml jsem si, že se nějak špatně interpretoval ten výraz pro y. Je to y = floor ( (i % WD) / W )
Díky moc vám oboum, zatím použiji 3d pole a poté to převedu do 1d a
zjistím jestli to pro mě má nějaký smysl 
Nedalo mi to a musel jsem se to pokusit zobecnit pro n-rozměrný prostor. Objekt o rozměrech d1, d2, ..., dn jde rozdělit na podobjekty o velikosti 1 tak, že pro objekt na indexu i lze vypočítat souřadnice v_j pro všechna j v přirozených číslech v intervalu <1, n> rekurentním vzorcem:
v_j(i, nD) = v_j(i % (d1 * d2 * ... * d_(n-1)), (n-1)D)
pro 0 < j < n
v_j(i, nD) = floor(i / (d1 * d2 * ... * d_(n-1))) pro j =
n
Jsou dány souřadnice v1 až vn:
V = [v1, v2, ..., vn] je n-vektor
D = [1, d1, d1 * d2, ..., (d1 *
d2 * ... * d_(n-1))] je n-vektor,
pak index(V, D) = dot(V, D) (skalární součin V, D)
Tenhle způsob ukládání prostoru je rychlý, ale pokud ho budeš zvětšovat nebo posílat po síti / ukládat na disk, brzo narazíš na limit paměti.
Řešením může být třeba Octree, pokud ten prostor není příliš členitý v celém svém objemu.
Takže když to uložím jako 1D pole, bude soubor větší, než kdybych ho ukládal jako 3d pole?
Ne.
Ale ve 3D roste množství dat pro uložení 3D pole se třetí mocninou - i
prázdné pole o hraně 1000 jednotek při velikosti prvku 1 bajt už bude
velké 1000 x 1000 x 1000 bajtů, tedy cca jeden GB.
Octree naproti tomu bude zabírat místo podle členitosti mapy - pokud je
většina mapy jen volný prostor, tak ten volný prostor octree dokáže
uložit jako jeden velký blok a nemusíš ukládat stav všech těch volných
jednotek (krychlí) uvnitř toho volného prostoru.
Ale jak to mám v javascriptu implementovat (klidně zjednodušeně)?
To už jsem hledal, nemohl bys napsat něco konkrétního?
Koukni se na quadtree - to je 2D verze toho algoritmu, tam to třeba pochopíš líp - např. na wiki http://en.wikipedia.org/wiki/Quadtree
V podstatě jde o to, že čtverec, na kterém daný bod leží, dělíš, dokud nenajdeš dostatečně malý odpovídající čtverec.
Každý ten čtverec má odkazy na své 4 podčtverce, tam, kde jsou ukazatele nulové, tam je obsahem toho zbytku čtverce nějaká hodnota, kterou má ten čtverec u sebe.
Takhle se to blbě vysvětluje, chce to vidět ten obrázek, tam to snad
pochopíš lépe 
Už to chápu, teď jen nevím jak to v javascriptu zařídit 
muzes prosim vysvetlit podrobneji? Nerozumim proc by 8cka byla 2.2
Zobrazeno 26 zpráv z 26.
