Autor Zpráva
mackopu
Profil
Mám pole čísel, které obsahuje vždy více než 100 prvků. Nyní potřebuji vypsat čísla tak, aby:

1. zůstalo zachováno první a poslední číslo
2. počet čísel včetně prvního a posledního byl přesně 100
3. čísla mezi prvním a posledním měla mezi sebou pravidelné rozestupy

Kdyby mělo pole čísel 202 (402) prvků, je to hračka - nechám vypsat první, poslední a mezi nimi každé druhé (čtvrté). Ale prvků může být např. 135 nebo 2761. A včil mudruj...

K čemu to vlastně? Pole čísel obsahuje nadmořské výšky pro vygenerování grafu. Toto pole získávám parsováním gpx souboru, který je výstupem cyklistického tachometru, zaznamenávajícího GPS souřadnice. Nad grafem se pak pomocí javascriptu odehrává událost, která operuje POUZE se 100 čísly.

Poradíte?
Keeehi
Profil
Něco jsem vyrobil, snad je to podle vašich představ.
$pomprom=0;

for($i=99;$i>0;$i--){
  $pricist=(count($pole)-$pomprom)/$i;
  echo $pole[$pomprom]."<br />\n";
  $pomprom+=round($pricist) ;
}

echo $pole[count($pole)-1];
V proměnné $pole jsou vstupní data
mackopu
Profil
Keeehi:
Díky za námět, ale stále to ještě není ono. Rozdíly mezi křivkou grafu původního (vykresleného s použitím všech prvků) a stávajícího (s použitím 100 prvků) jsou příliš markantní. Vrchol je tam, kde bylo údolí atd. Popravdě mi ani není jasné, jakým způsobem tento cyklus jednotlivé prvky vybírá (upřednostňuje)...
tiso
Profil
mackopu: ono by sa možno hodilo tie čísla vyberať tak, aby sa zachovávali minimá a maximá, aby bolo vidno neskreslený výškový profil trasy.
Ale ideálne by bolo zmeniť tú JS funkciu, aby vedela pracovať s ľubovolným počtom...
petr 6
Profil
mackopu:
Nyní potřebuji vypsat čísla tak,
čísla mezi prvním a posledním měla mezi sebou pravidelné rozestupy
Ale prvků může být např. 135

Takže pokud například první číslo bude 1 a poslední číslo bude 200 a těch čísel bude 135, tak chceš vypsat čísla s rozestupy 199/100? A pak je tedy jedno, jestli těch čísel máš 135 nebo třeba 5324, protože stejně do výsledného pole použiješ jen to první a poslední?

Nebo jsi jen nepřesně popsal, co vlastně potřebuješ a zřejmě se ti bude hodit ten Keehiho kód? (Například, bude-li těch čísel 101 a ty budeš chtít vybrat 100, tak které vynecháš, nebo vybereš těch 100 nějakou interpolací?)
mackopu
Profil
tiso:
1. Asi tak nějak, ale neumím si představit jak.
2. JS funkce musí pracovat se 100 prvky; vysvětlení proč by bylo nad rámec téhle diskuze.
petr 6
Je to prosté. Potřebuji ZREDUKOVAT libovolný (ale vždy větší než 100) počet uzlů grafu na 100 tak, aby výsledný profil byl co nejpodobnější tomu původnímu, se zachováním bodu začátku a konce, a samozřejmě nejmarkantnějších výkyvů.
Podobnou funkci lze nalézt v programu CorelDraw, kde se přesně jmenuje "redukce uzlů křivky". Výsledný graf pak není plný drobných zoubků, ale zachovává jen podstané rozdíly. Počet uzlů po redukci si tam však nelze zvolit.
tiso
Profil
mackopu: poprosím ťa o 2 vzorové polia (menší a väčší počet prvkov).
mackopu
Profil
tiso:
menší
větší

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0