2012-06-27 19 views
2

人數我與它有像8DnKOc6FISU,rNsrl86inpo,5qcmCUsw4EQ轉換arbitary串0的Javascript和1之間

(中集A-ZA-Z0-9_-即11個字符)IDS Youtube視頻工作目標是將每個ID轉換爲顏色(由範圍0-1表示),因此可以可靠地繪製圖表。根據this question這些是64位數字。鑑於:

  • 我想充分利用色彩空間的任何給定的視頻
  • 色覺是不是準確反正

...這似乎是明智基地這關閉了id的最後2-3個字符。

我的引線的方法是一個函數,我從here,每個字符轉換成二進制數,像這樣借:

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); 
     } 
    } 
    } 

但是,這留下的如何轉換這回浮動的問題。

一個優雅的解決方案的任何想法?

非常感謝您的幫助!

回答

3

知道系統是基數爲64(26 + 26 + 10 + 2),只需讀取每個符號,在每次迭代中將其添加到總和乘以64。最後你會有一個整數。將其除以最大值將其歸一化至0-1範圍。

儘管如此,當您的ID接近2 時,您將開始喪失精度,因爲這是JS可以精確表示整數的最大值。

另外,您可以從一開始就爲浮線中的每個位置添加(letter_index/64 letter_position),但您會失去更多的精度。

+1

無論如何,電腦顯示器只能使用2^24個不同的顏色,所以有限的精度並不是真正的問題。不知道你是否需要用顏色的浮點數來處理顏色,你可以用2^24的模數來進行數學運算,而不必擔心整數溢出問題。 – millimoose

+0

謝謝奧列格。感謝你的幫助。 –

相關問題