Отображение произвольных строк к значениям RGB

Этот тип ошибки чаще всего возникает при использовании ключей OpenSSH. В настоящее время CrafterCMS не поддерживает ключи OpenSSH. Пожалуйста, используйте вместо этого ключи RSA.

Документацию по устранению неполадок можно найти здесь здесь

.

8
задан 12 revs, 2 users 72% 23 May 2017 в 11:55
поделиться

7 ответов

Необходимо уточнить больше то, что Вы подразумеваете "под подобными строками" для предложения соответствующей функции преобразования. Строки

 "I am going to the store" and 
"We are going to the store" 

рассмотренный подобным? Что относительно строк

 "I am going to the store" and 
"J bn hpjoh up uif tupsf" 

(все буквы в оригинале +1), или

 "I am going to the store" and 
"I am going to the store today"

? На основе того, под чем Вы подразумеваете "подобный", Вы могли бы рассмотреть различные функции.

Если различие может базироваться только на значениях символов (в Unicode или безотносительно пространства, они от), то можно попытаться подвести итог значений и использовать результат в качестве оттенка для пространства HSV. Если наличие более длинной строки должно заставить цвета более отличаться, Вы могли бы рассмотреть весящие символы их положением в строке.

Если различие более сложно, такой как случаями определенных букв или слов, то необходимо определить это. Возможно, можно решить красные, зеленые и синие значения на основе числа Es, Ss и Rs в строке, если домен имеет многие из них. Или выберите оттенок на основе отношения гласных к согласным или слов к слогам.

Существуют многие, много различных способов приблизиться к этому, но лучший действительно зависит от того, что Вы подразумеваете под "подобными" строками.

3
ответ дан 5 December 2019 в 19:03
поделиться

Это кажется на желание какого-то хеша. Это не должно быть безопасно (так ничто столь же сложное как MD5 или SHA) кроме чего-то вроде:

char1 + char2 + char3 + ... + charN % MAX_COLOUR_VALUE

работал бы простым первым шагом. Вы могли также сделать более необычные вещи вроде наличия каждого символьного действия как 'амплитуда' для R, G и B (e мог быть +1R, +2G и-4B, и т.д.), и затем просто сложите все значения в строке... фиксируют их в конце, и у Вас есть метод превращения строк произвольной длины в цвета как 'цветной хеш' вид процесса.

2
ответ дан 5 December 2019 в 19:03
поделиться

Извините, но Вы не можете сделать то, что Вы ищете с levenshtein расстоянием или подобные. RGB и HSV являются 3-мерными геометрическими пробелами, но levenshtein расстояние описывает метрическое пространство - намного более свободный набор contstraints без постоянного числа размеров. Нет никакого способа отобразить метрическое пространство в постоянное число размеров, всегда сохраняя местность.

Насколько приближения идут, тем не менее, для единственных условий, Вы могли использовать модификацию алгоритма как soundex или метафон для выбора цвета; для нескольких условий Вы могли, например, применить soundex или метафон к каждому слову индивидуально, затем подвести итог их (с переполнением).

0
ответ дан 5 December 2019 в 19:03
поделиться

Во-первых, необходимо будет выбрать способ измерить строковое подобие. Минимальное расстояние редактирования является традиционным, но не является достаточным, чтобы хорошо-заказать строки, который является тем, в чем Вы будете нуждаться, если Вы захотите выделить те же цвета тем же строкам каждый раз, когда - возможно, Вы могли взвесить затраты на редактирование алфавитным расстоянием. Также минимальное расстояние редактирования отдельно не может быть очень полезным, если то, что Вы после, является подобием в речи, а не в письменной форме (если так, полагайте, что stemming/soundex передает сначала), или некоторый другой смысл "подобия".

Затем необходимо выбрать способ пересечь видимое цветовое пространство на основе той метрики. Может быть полезно рассмотреть использование HSL или представления цветовой модели HSV - алгоритм мог затем стать столь же простым как выбор стартового оттенка и обход отсортированного корпуса, присвоив текущий оттенок каждой строке прежде, чем сместить его различием строки от предыдущего.

1
ответ дан 5 December 2019 в 19:03
поделиться

Я, возможно, определил бы некоторую дельту между двумя строками. Я не знаю то, что Вы определяете как различие (или "неравенство") двух строк, но самой очевидной вещью, о которой я мог думать, будет длина строки и количество происшествий конкретных букв (и их индекс в строке). Это не должно быть хитро для реализации его таким образом, что это возвращает тот же цветовой код в равных строках (если Вы делаете равное первое, и возврат перед дальнейшим сравнением).

Когда дело доходит до фактического значения RGB я попытался бы преобразовать строковые данные в 4 байта (RGBA) или 3 байта, если Вы только используете RGB. Я не знаю, вписалась ли каждая строка в них (поскольку это может быть конкретным языком?).

0
ответ дан 5 December 2019 в 19:03
поделиться

How important is it that you never end up with two dissimilar strings having the same colour?

If it's not that important then maybe this could work?

You could pick a 1 dimensional color space that is "homotopic" to the circle: Say the color function c(x) is defined for x between 0 and 1. Then you'd want c(0) == c(1).

Now you take the sum of all character values modulo some scaling factor and wrap this back to the color space:

c( (SumOfCharValues(word) modulo ScalingFactor) / ScalingFactor )

This might work even better if you defined a "wrapping" color space of higher dimensions and for each dimension pick different SumOfCharValues function; someone suggested alternating sum and length.

Just a thought... HTH

1
ответ дан 5 December 2019 в 19:03
поделиться

Вот мое предложение (я думаю, что у этого алгоритма есть общее название, но я слишком устал, чтобы его запомнить):

Вы хотите преобразовать каждую строку в трехмерную точку node (r, g, b) (вы можете масштабировать значения так, чтобы они соответствовали вашему диапазону), чтобы минимизировать следующую ошибку:

Error = \sum_i{\sum_j{(dist(node_i, node_j) - dist(str_i, str_j))^2}}

Вы можете сделать это:

  1. Сначала назначьте каждой строке случайный цвет (r, g, b)
  2. Повторяйте, пока не сочтете нужным (например, ошибка будет меньше \ epsilon = 0,0001):
    1. Выберите случайный узел
    2. Отрегулируйте его положение (r, g, b) так, чтобы ошибка была минимальной.
  3. Масштабируйте систему координат так, чтобы координаты каждого узла находились в диапазоне [0., 1.) или [0, 256]
1
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: