Это немного сложно.
Вы пытаетесь ограничить свои цветовые векторы положительным октантом куба с центром в начале координат. Вот эскиз проблемы в 2-ой:
Простая матрица вращения быстро вывела бы (1,1) цветовой вектор из разрешенной "синей" зоны. Не говоря уже о том, что это может также вытолкнуть векторы из положительного квадранта все вместе.
Так что одной идеей будет преобразование вашего кубовидного пространства в сферическое, выполнение там преобразования, а затем обратное преобразование. Это преобразование (очевидно!) Нелинейно. Некоторые идеи о том, как это сделать, можно найти здесь: сообщение в блоге .
Как только вы вместо этого ограничиваетесь сферой, все становится немного проще. Вычислить собственные значения вашей матрицы преобразования. Любые значения больше единицы означают, что цветовой вектор может расти произвольно большим, поэтому эти матрицы отсутствуют. Все они, равные единице, означают, что величина вектора останется неизменной, независимо от того, сколько раз вы составляете матрицу. (Ограничено числовой точностью на вашем компьютере). Все, что меньше одного, означает, что ваш цветовой вектор в конечном итоге упадет до (0,0).
Теперь вам по-прежнему нужно предотвращать отрицательную зависимость любого компонента вектора. Я думаю, что вы можете добиться этого, если все собственные значения будут неотрицательными.
Итак, в целом, положительно определенная матрица с индуцированной матрицей с нормой <= 1 должна сработать. </p>
Но теперь, когда я сказал все это ... это, вероятно, не то, что вы хотите сделать, так как это довольно сложно и вычислительно дорого. («Должен быть лучший способ!»). Я предлагаю опубликовать новый вопрос в поисках лучшей техники, а не пытаться взломать данную технику. Тем не менее ... это было забавное мысленное упражнение.