Я читал где-нибудь, человеческий глаз не может различать меньше чем 4 значения независимо. таким образом, Это - что-то для учета. Следующий алгоритм не компенсирует это.
я не уверен, что это точно, что Вы хотите, но это - один способ случайным образом генерировать неповторяющиеся значения цвета:
(остерегаются, непоследовательный псевдокод вперед)
//colors entered as 0-255 [R, G, B]
colors = []; //holds final colors to be used
rand = new Random();
//assumes n is less than 16,777,216
randomGen(int n){
while (len(colors) < n){
//generate a random number between 0,255 for each color
newRed = rand.next(256);
newGreen = rand.next(256);
newBlue = rand.next(256);
temp = [newRed, newGreen, newBlue];
//only adds new colors to the array
if temp not in colors {
colors.append(temp);
}
}
}
Один способ, которым Вы могли оптимизировать, это для лучшей видимости должно будет сравнить расстояние между каждым новым цветом и всеми цветами в массиве:
for item in color{
itemSq = (item[0]^2 + item[1]^2 + item[2]^2])^(.5);
tempSq = (temp[0]^2 + temp[1]^2 + temp[2]^2])^(.5);
dist = itemSq - tempSq;
dist = abs(dist);
}
//NUMBER can be your chosen distance apart.
if dist < NUMBER and temp not in colors {
colors.append(temp);
}
, Но этот подход значительно замедлил бы Ваш алгоритм.
Иначе должен был бы фрагментировать случайность и систематически проходить каждые 4 значения и добавлять цвет к массиву в вышеупомянутом примере.
Из сообщений в наших внутренних списках рассылки на работе я заметил следующее:
Существует множество пограничных кроссбраузерных случаев, в которых задействовано динамически инъекционные скрипты. Если вставка исходного файла YUI 3 в ваш скрипт не вариант, и если вы не можете полагаться на свойство уже иметь YUI 3 seed загружен, я бы рекомендовал использовать LazyLoad (бесстыдный плагин) для загрузите ваш скрипт: http://github.com/rgrove/lazyload/
Вы можете объединить lazyload.js в свой скрипт, а затем использовать что-то вроде этого для загрузки начального числа YUI 3, если его еще нет на странице:
(function () {
function init() {
YUI().use('node', function (Y) {
// ... do my stuff ...
});
}
if (YUI) {
init();
} else {
LazyLoad.js('http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js',
init);
}
})();
Есть только одна проблема, о которой я могу думать с этим подходом (и это дважды поднималось в вопросах по SO за последний месяц).
Проблема в том, что jQuery как 1.3.2 не может определить, загружен ли документ, если он сам включен после загрузки документа (например, динамическое