PDA

Просмотр полной версии : Документация по класс Matrix намеренно вводит в заблуждение?


Иван Старков
22.11.2005, 15:46
Начал тут разбираться с новым flash 8
Нашел такие вот грабли - по документации класса Matrix
Конструктор класса выглядит как new Matrix(a,b,c,d,tx,ty) и по доке это матрица выглядит как
a b tx
c d ty
0 0 1
и даны операции над матрицей типа concat и тп. и хоть по доке нигде не пишут что операция concat есть умножение матриц, но из курса геометрии в памяти держится что объединение матриц преобразования оно самое умножение и есть. При проверке данной теории наступаем на грабли - concat не фига не умножение. Но если представить матрицу ввиде
a b 0
c d 0
tx ty 1
то все сразу становится на свои места - concat работает как умножение, операция трансформации MoviClip.transform.matrix = тоже становится понятна, есть - умножние векторов мувиклипа на матрицу (NewVectorCoords = (VectorCoords * Matrix))

Формально вроде к доке и не придраться кроме названия класса, ничто там не указывает что это реализация именно работы с матрицами, всё называют преобразованиями, но неформально все это вводит в заблуждение.

styx
22.11.2005, 18:14
Нормальное умножение... Весь вопрос в порядке сомножителей :). Вообще при графических преобразованиях принят именно тот порядок, что и описан в хелпе.

Иван Старков
22.11.2005, 18:51
Но операция умножения матриц, остается неизменной. ЕЕ никто не переопределяет, здесь же матрица вида
a b tx
c d ty
0 0 1
при операции concat (по сути умножение) ведет себя как матрица
a b 0
c d 0
tx ty 1
что ЯВНО НЕНОРМАЛЬНО.

Далее вернувшись к графике и к преобразованиям, в графических преобразованиях принято при преобразовании Матрицу умножать На Вектор т.е NewVector = Matrix*Vector, если глянете преобразования Flash то тут как раз наоборот они работают как NewVector = Vector * Matrix,
и реально используется не та матрица что они указывают, а та что я.

Т.е по сути переход от формул которые используются при графике
[e`1x e`2x Dx]
NeVec = [e`1y e`2y Dy] * OldVec
[ 0 0 1] (e'1x и тп.
Фо flash достигается транспонированием данной формулы

что говорит нам о том что он реально использует не те матрицы что написаны в хелпе. И поэтому считаю что упоминание о том что в графике так принято верным по сути но не имеющим отношение к flash. Ибо пишут они как принято в графике но применяют какие то собой придуманные операции, что в графике не принято.

Иван Старков
22.11.2005, 19:00
Просто люблю вначале все просчитать на бумажке. А потом полученные итоги подставить в программу, и когда программа начинает вести себя не как было задумано, не как это общепринято, это удивляет. Хотя все что видно в хелп наводит, прямо таки толкает на мысль, что все как у всех, как пишут в книжках и тп. Ан нет облом. Зачем переопределять стандартные операции, изобретать им другое название и тп.

St. Father
23.11.2005, 09:07
Помойму где-то жоцкие опечатки. Я читал, что матрица имеет вид:
a d g
b e h
c f i
Но в хелпе...