android.графика.Матрица -> Как работает постскейлинг

#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); , что это должно округлить его до ближайшего пикселя