Почему вы берете абсолютные значения для dr, dg, db?Не то чтобы у них был какой-то путь к отрицательному результату, и на самом деле, если бы они это сделали, я бы воспринял это как указание на ошибку в дальнейшем.
Я человек с C и VHDL, а не javascript, но, конечно же,
if (r == maxRGB && g == minRGB)
должно быть что-то вроде
if (r == maxRGB() && g == minRGB())
?
Я предполагаю, что == & && связывают верные пути, и вам не нужны дополнительные скобки (я бы вставил их в C только потому, что в нем есть некоторые неясные случаи, которые не стоит запоминать).
Я также подвергаю сомнению целесообразность сравнений равенства с плавающей точкой здесь, которые редко заканчиваются хорошо.Было бы хорошо, если бы не отличный дизайн в типе с фиксированной запятой, но Javascript IIRC имеет тенденцию использовать FP для любых числовых вещей, которые просто болезненны (И X86 делает избыточную точность, если не задействована очистка регистра, которая может жаловаться на равенства FP).Посмотрите классическую статью Goldburgs, если вы хотите получить математику, или это, если вы хотите что-то более простое https://floating -point-gui.de /
Не должны maxRGB и minRGB принимать аргументы(Вы не показываете эти функции), но я ожидаю, что они будут принимать r, g, b в качестве параметров?
Я склонен иметь дело с цветом в широковещании (где мы живем в пространствах Y'CbCr), ноЯ также думаю, что вам, вероятно, следует перейти к линейному световому пространству перед выполнением преобразования, так как в противном случае гамма-кривые вас обидят, но это неприятно.