Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Преобразования с матрицей (http://www.flasher.ru/forum/showthread.php?t=180940)

Den_root 11.06.2012 22:57

Преобразования с матрицей
 
Доброго времени суток! Как повернуть 2D матрицу, что бы она смотрела в направлении 2D вектора? Вопрос относится скорее к алгебре чем к AS3, но все же!:)

silin 11.06.2012 23:10

по отдельности ( повернуть - Matrix#rotate, угол - Math.atan2) какбе понятно
а вместе, ну что бы она смотрела куда-то что-то не складывается, матрица вообще куда смотрит ?
может переформулируешь

Den_root 11.06.2012 23:20

Например если вектор (0.70,0.70), то он повернут на 45° нужно, что бы и матрица была повернута на 45° Надо как то хитро подставить координаты вектора в матрицу.
[0.70 0.70
a b ]
Вот a и b не знаю как найти.

silin 11.06.2012 23:29

Код AS3:

var mtrx:Matrix = new Matrix();
var angle:Number = Math.atan2(0.7, 0.7);
mtrx.rotate(angle);


Den_root 11.06.2012 23:49

А нет ли способа по проще, без тригонометрии? Нельзя ли решить дело подстановкой?

wvxvw 12.06.2012 00:07

На сколько я понимаю, нет, да и быть не может, т.е. можно те же действия сделать по другому, например:
Код:

[cos(a), -sin(a)]
[sin(a),  cos(a)]

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

silin 12.06.2012 00:16

коэффициенты матрицы это синусы/косинусы этого вектора, можно их напрямую считать и подставлять
только мне не кажется, что это проще

Добавлено через 2 минуты
wvxvw, угол можно и не считать, типа cos=x/sqrt(x^2+y^2)

Den_root 21.06.2012 02:56

Вот просветите, matrix и matrix3D как то по разному просчитываются? Я повернул обе матрицы на -90 градусов и получил неодинаковые результаты. Например, насколько я понимаю, второй элемент matrix3D(вторая цифра trace) эквивалентен с элементу matrix, но они имеют разные знаки!
Код AS3:

matrix : (a=0, b=-1, c=1, d=0, tx=0, ty=-0)
matrix3D :0,-1,0,01,0,0,00,0,1,00,0,0,1


vizgl 21.06.2012 03:53

Цитата:

Сообщение от Den_root (Сообщение 1085390)
Вот просветите, matrix и matrix3D как то по разному просчитываются? Я повернул обе матрицы на -90 градусов и получил неодинаковые результаты. Например, насколько я понимаю, второй элемент matrix3D(вторая цифра trace) эквивалентен с элементу matrix, но они имеют разные знаки!
Код AS3:

matrix : (a=0, b=-1, c=1, d=0, tx=0, ty=-0)
matrix3D :0,-1,0,01,0,0,00,0,1,00,0,0,1


Они по определению не могут по разному просчитываться. 2д матрица имеет размерность 3x3, а 3д 4x4.

2d:
ax, ay, 0
bx, by, 0
tx, ty, 1

или так, в терминологии as3
a, b, 0
c, d, 0
tx, ty, 1

3d:
ax, ay, az, 0
bx, by, bz, 0
cx, cy, cz, 0
tx, ty, tz, 1

Вот и смотри, какие коэффициенты должны быть равны.

Den_root 21.06.2012 14:02

vizgl Так разве c и bx не должны быть равны?

2d:
a, b, 0
c, d, 0
tx, ty, 1

3d:
ax, ay, az, 0
bx, by, bz, 0
cx, cy, cz, 0
tx, ty, tz, 1


Я даже на бумажке, в ручную повернул и с должен быть -1
а,с это вектор оси х равный (1,0), при повороте его на -90 он будет равен (0,-1), но никак не (0,1) Это если для флешевского пространства координат где ось у направленна вниз.


Часовой пояс GMT +4, время: 10:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.