Autor Wątek: algorytm samplowania przedziału  (Przeczytany 732 razy)

therealremi

  • Gość
# Listopad 16, 2009, 20:44:52
Czy ktoś wie jak się fachowo nazywa taki proces samplowania przedziału <A,B>:
f:X -> <A,B>
f(0) = (A+B)/2
f(1) = (A+f(0))/2
f(2) = (f(0)+B)/2
f(3) = (A+f(1))/2
f(4) = (f(1)+f(0))/2
itd.
Ma on tą fajną własność, że sample są rozmieszczone równomiernie (za wyjątkiem ostatniego "poziomu" podziału) i zwiększenie liczby sampli nie zmienia ich pozycji w przedziale.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

therealremi

  • Gość
# Listopad 16, 2009, 21:06:50
Metoda bisekcji?

therealremi

  • Gość
# Listopad 16, 2009, 21:43:16
Metoda bisekcji?
Nie. Chyba źle to sformułowałem. Metoda bisekcji to metoda poszukiwania punktu zerowego funkcji, a mnie interesuje nazwa funkcji (a raczej algorytmu) o podanych własnościach.
Chyba najbliższe temu zagadnieniu jest po prostu tworzenie i przeszukiwanie Perfect Binary Tree (TM).
« Ostatnia zmiana: Listopad 16, 2009, 21:45:33 wysłana przez therealremi »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 16, 2009, 22:31:28
Cytuj
Metoda bisekcji to metoda poszukiwania punktu zerowego funkcji, a mnie interesuje nazwa funkcji (a raczej algorytmu) o podanych własnościach.
Tyle że nie podałeś praktycznie żadnych własności. ;)

therealremi

  • Gość
# Grudzień 07, 2009, 20:01:09

template<class T>
T get_sample(UINT sample_id, T lower_bound, T upper_bound)
{
assert(sample_id >= 1);
FLOAT tree_level_start( std::exp2( std::floor( std::log2( static_cast<FLOAT>(sample_id) ) ) ) );
FLOAT tree_level_end( tree_level_start*2 );
FLOAT sample_normalized_position( (sample_id - tree_level_start + 0.5f) / (tree_level_end - tree_level_start) );
return static_cast<T>( lower_bound +  sample_normalized_position * (upper_bound - lower_bound) );
}

Zapisałem to taką oto funkcją C++. Ponieważ nikt nie podał nazwy tej metody, więc od dzisiaj będzie nosiła nazwę "therealremi binary sampling method".