3

私は、8DnKOc6FISU、rNsrl86inpo、5qcmCUsw4EQ (つまり、セット A-Za-z0-9_- 内の 11 文字) のような ID を持つ Youtube ビデオを扱っています。

目標は、各 ID を色 (0 から 1 の範囲で表される) に変換して、確実にグラフ化できるようにすることです。

この質問によると、これらは 64 ビットの数値です。とすれば:

  • 任意のビデオ セットで色空間を最大限に活用したい
  • とにかく、色の知覚はそれほど正確ではありません

... ID の最後の 2 ~ 3 文字に基づいてこれを行うのが賢明なようです。

私の主なアプローチは、 hereから借りた関数で、次のように各文字を 2 進数に変換します。

    function toBin(str){
     var st,i,j,d;
     var arr = [];
     var len = str.length;
     for (i = 1; i<=len; i++){
      d = str.charCodeAt(len-i);
      for (j = 0; j < 8; j++) {
       st = d%2 == '0' ? "class='zero'" : "" 
       arr.push(d%2);
       d = Math.floor(d/2);
      }
     }
    }

しかし、これをどうやって float に戻すかという問題が残ります。

エレガントなソリューションのアイデアはありますか?

助けてくれて本当にありがとうございます!

4

1 に答える 1

3

システムがbase64(26 + 26 + 10 + 2)であることを知っているので、各シンボルを読み取り、それを合計に加算して、各反復で結果に64を掛けます。最終的には整数になります。最大値で除算して、0-1の範囲に正規化します。

ただし、IDが2 53に近づくと、精度が低下し始めます。これは、JSが整数で正確に表現できる最大値です。

または、行の各位置に(letter_index / 64 letter_position )を追加することで、最初からフロートを数えることもできますが、処理の精度が低下します。

于 2012-06-27T11:53:59.130 に答える