Матрица преобразования: Какие свойства нужны моей матрице, чтобы векторы, которые она преобразовывает, всегда оставались в диапазоне [0-1]? - PullRequest
1 голос
/ 21 сентября 2011

У меня есть несколько векторов, которые представляют цвет в виде трехэлементного вектора в диапазоне [0-1]. Из-за того, как цвет работает в opengl, эти значения являются ошибочными, если они находятся за пределами этого диапазона. Я хочу разработать матрицу или набор матриц, которые могут плавно преобразовывать цвет внутри этого единичного пространства, поэтому я начинаю с единичной матрицы и слегка ее изменяю (что дает мне плавно меняющуюся часть). Но неизбежно значения начинают выходить за пределы этого диапазона. Существуют ли какие-либо условия, которые я могу проверить относительно матрицы преобразования, которая будет гарантировать, что повторяющаяся матрица не преобразует вектор выше единицы или ниже нуля?

1 Ответ

2 голосов
/ 21 сентября 2011

Это немного сложно.

Вы пытаетесь ограничить свои цветовые векторы положительным октантом куба с центром в начале координат. Вот эскиз проблемы в 2-ой:

enter image description here

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

Так что одной идеей будет преобразование вашего кубовидного пространства в сферическое, выполнение там преобразования, а затем обратное преобразование. Это преобразование (очевидно!) Нелинейно. Некоторые идеи о том, как это сделать, можно найти здесь: сообщение в блоге .

Как только вы вместо этого ограничиваетесь сферой, все становится немного проще. Вычислить собственные значения вашей матрицы преобразования. Любые значения больше единицы означают, что цветовой вектор может расти произвольно большим, поэтому эти матрицы отсутствуют. Все они, равные единице, означают, что величина вектора останется неизменной, независимо от того, сколько раз вы составляете матрицу. (Ограничено числовой точностью на вашем компьютере). Все, что меньше одного, означает, что ваш цветовой вектор в конечном итоге упадет до (0,0).

Теперь вам по-прежнему нужно предотвращать отрицательную зависимость любого компонента вектора. Я думаю, что вы можете добиться этого, если все собственные значения будут неотрицательными.

Итак, в целом, положительно определенная матрица с индуцированной матрицей с нормой <= 1 должна сработать. </p>

Но теперь, когда я сказал все это ... это, вероятно, не то, что вы хотите сделать, так как это довольно сложно и вычислительно дорого. («Должен быть лучший способ!»). Я предлагаю опубликовать новый вопрос в поисках лучшей техники, а не пытаться взломать данную технику. Тем не менее ... это было забавное мысленное упражнение.

...