Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Матрицы(векторы) (http://www.flasher.ru/forum/showthread.php?t=85447)

Alexhhh 22.09.2006 16:23

Матрицы(векторы)
 
Возникла такая проблема -
есть вектор [x,y,z],
нужно его повернуть на некоторый угол.
Есть ли в as ф-ии работы с векторами(матрицами)?
Самому писать лень...

Хемуль 23.09.2006 01:09

2 Alexhhh:
Ищите в справке flash.geom.Matrix.
Также может вам пригодиться это: http://www.senocular.com/pub/kirupa/...torthread.html
И это: http://chattyfig.figleaf.com/piperma...er/014795.html

iNils 23.09.2006 12:36

flash.geom.Matrix будет работать с двухмерным вектором, а не с трехмерным.

miramax 23.09.2006 12:47

У Silin'а есть исходники трёхмерных моделек. Там сначала объявляются вершины модели, потом полигоны, потом текстуры на кажды полигон. Только всё это под AS 3.0
http://silin.fatal.ru

expl 24.09.2006 22:27

Вот пример поворота точки на произовольный угол, может поможет
Стандартный способ перемножения 7-ми матриц мне не подошел, т.к. если возникали частные случаи (ось поворота совпадала с коорд. осью) он не работал.
Код:

//модуль оси поворота
var wmod=_global.Math.sqrt(w[0]*w[0]+w[1]*w[1]+w[2]*w[2]);
//нормализация оси поворота
var axis=(wmod>0.001) ? [w[0]/wmod, w[1]/wmod, w[2]/wmod] : [0,0,1];
//расчет трансформы поворота вокруг произвольной оси
//содрано со статьи автора fowrel@yandex.ru, сайт не помню
//-------------------------------------------
//wmod - uгол поворота (назван так, пото мучто здесь это модуль угловой скорости
//axis - единичный вектор, символизирующий ось поворота
//o=[ox,oy,oz] - координаты начала вектора ахis
var angle=wmod*0.01;
var angleCos=Math.cos(angle), angleSin=Math.sin(angle);
var x=axis[0]*angleSin;
var y=axis[1]*angleSin;
var z=axis[2]*angleSin;
var w=angleCos;
var xx=x*x, xy=x*y, xz=x*z, xw=x*w;
var yy=y*y, yz=y*z, yw=y*w;
var zz=z*z, zw=z*w;
var W=[
        1 - 2*(yy+zz),                2*(xy-zw),                2*(xz+yw),                0,
        2*(xy+zw),        1 - 2*(xx+zz),                2*(yz-xw),                0,
        2*(xz-yw),                2*(yz+xw),        1 - 2*(xx+yy),                0,
        0,                                0,                                0,                1];
var F=[
        1,0,0,-o[0],
        0,1,0,-o[1],
        0,0,1,-o[2],
        0,0,0,1];
var F1=[
        1,0,0,o[0],
        0,1,0,o[1],
        0,0,1,o[2],
        0,0,0,1];
var t=mXm(mXm(F1,W),F);//конечная матрица поворота вокруг произвольной оси axis
//-------------------------------------------
//mXm-функция перемножения матриц
/*m1Xm0=function(m1, m0){
        return [
                m1[0]*m0[0] + m1[1]*m0[4] + m1[2]*m0[8] + m1[3]*m0[12],
                m1[0]*m0[1] + m1[1]*m0[5] + m1[2]*m0[9] + m1[3]*m0[13],
                m1[0]*m0[2] + m1[1]*m0[6] + m1[2]*m0[10] + m1[3]*m0[14],
                m1[0]*m0[3] + m1[1]*m0[7] + m1[2]*m0[11] + m1[3]*m0[15],

                m1[4]*m0[0] + m1[5]*m0[4] + m1[6]*m0[8] + m1[7]*m0[12],
                m1[4]*m0[1] + m1[5]*m0[5] + m1[6]*m0[9] + m1[7]*m0[13],
                m1[4]*m0[2] + m1[5]*m0[6] + m1[6]*m0[10] + m1[7]*m0[14],
                m1[4]*m0[3] + m1[5]*m0[7] + m1[6]*m0[11] + m1[7]*m0[15],

                m1[8]*m0[0] + m1[9]*m0[4] + m1[10]*m0[8] + m1[11]*m0[12],
                m1[8]*m0[1] + m1[9]*m0[5] + m1[10]*m0[9] + m1[11]*m0[13],
                m1[8]*m0[2] + m1[9]*m0[6] + m1[10]*m0[10] + m1[11]*m0[14],
                m1[8]*m0[3] + m1[9]*m0[7] + m1[10]*m0[11] + m1[11]*m0[15],

                m1[12]*m0[0] + m1[13]*m0[4] + m1[14]*m0[8] + m1[15]*m0[12],
                m1[12]*m0[1] + m1[13]*m0[5] + m1[14]*m0[9] + m1[15]*m0[13],
                m1[12]*m0[2] + m1[13]*m0[6] + m1[14]*m0[10] + m1[15]*m0[14],
                m1[12]*m0[3] + m1[13]*m0[7] + m1[14]*m0[11] + m1[15]*m0[15]];
};*/

Если требуется повернуть вокруг начала координат, удаляешь матрицы F и F1, тогда матрица W - конечная
P.S. Если верить fowrel@yandex.ru, то данная штука переделана с исходников Unreal Tournament


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

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