#android
#Android
Вопрос:
Добрый день,
Допустим, у меня есть матрица. У меня есть 2 значения: .9 для уменьшения масштаба и 1.1 для увеличения.
Когда я наношу matrix.postScale(0.9, 0.9);
3 раза, я наношу matrix.postScale(1.1, 1.1);
3 раза
Я не вернулся к тому, с чего начал!!
например, вот результаты, которые я записал:
Текущая шкала После масштабирования (x, x) Результирующая шкала
1 .9 .9
.9 .9 .80999994
.80999994 .9 .7189999
.7189999 1.1 .8018999
.8018999 1.1 .8820899
.8820899 1.1 .97029895
Как вы можете видеть, я не вернулся к 1. Что происходит, я неправильно получаю текущий масштаб?
Например, чтобы получить все значения справа, я предварительно сформировал это после применения postScale:
matrix.getValues(tempArrayFloat);
Number = tempArrayFloat[Matrix.MSCALE_X];
Я просто предположил, что MSCALE_X и MSCALE_Y будут одинаковыми?
Мой вопрос в том, что если я масштабирую матрицу, используя 1 конкретное значение 3 раза, .9 -> .9 -> .9, какое число мне нужно, чтобы вернуть ее в исходное положение?
-С уважением,
Пол
Ответ №1:
Числа в правой части вашей таблицы дают вам ответ: масштабирующая матрица умножает баллы на значение масштабирования. Таким образом, применение matrix.postScale(0.9)
в три раза масштабируется 0.9*0.9*0.9 = 0.729
. Применение matrix.postScale(1.1)
трехкратного масштабирования 1.1*1.1*1.1=1.331
. Чтобы вернуться к тому, с чего вы начали, вам нужно масштабировать на 1.0/0.729=1.372
Ответ №2:
Уменьшите масштаб, используя 1.1111111112 вместо 1.1, но если вы масштабируете растровое изображение, может быть проще изменить его размер до круглого значения.
В принципе, вы могли бы указать matrix.postScale(1.0/0.9, 1.0/0.9);
, что это должно округлить его до ближайшего пикселя