Форум 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=106914)

Скрипун 21.01.2008 22:00

поворот матрицы относительно некой точки
 
Добрый день всезнающие, многоуважаемые и любимые тов. по Flash.
У меня к Вам маленький вопрос:

есть массив фигуры кпримеру такое:

Код:

[[2,1],[2,0],[1,1],[0,1]]
Мне надо его повернуть по часовой стредке, относительно центра этой фигуры.

Сначала делаю просто поворот (относительно (0,0))
Код:

public function matrixRotation (arr:Array):Array {
         
          var arr_:Array = arr.concat();
          var arr_length:Number = arr.length;
          for (var i=0;i<arr_length;i++) {
              trace("перставляем элемент");
              var i_element = arr_[i][0];
              arr_[i][0] = arr[i][1];
              arr_[i][1] = i_element;
          }
          return arr_;
    }

Это поворачивает фигуру, но почему-то еще и отзеркаливает (а мне не надо) мне надо как в тетрисе фигурки ворочатся.
Товарищи. как это сделать?

iNils 21.01.2008 22:19

Вместо
12
34
56
78
Надо получить
87
65
43
21
?

Скрипун 21.01.2008 22:26

Цитата:

Сообщение от iNils
Вместо
12
34
56
78
Надо получить
87
65
43
21
?

Да! Если знаете, подскажите

iNils 21.01.2008 22:48

Код:

function matrixRotation (arrayA:Array):Array {
        var arrayB:Array = arrayA.concat ();
        var len:Number = arrayB.length;
        var lenH:Number = Math.floor (len / 2);
        for (var i:Number = 0; i < len; i++) {
                arrayB[i].reverse ();
        }
        for (var i:Number = 0; i < lenH; i++) {
                var array:Array = arrayB[i];
                arrayB[i] = arrayB[len - i - 1];
                arrayB[len - i - 1] = array;
        }
        return arrayB;
}
function echo (a) {
        for (var i:Number = 0; i < a.length; i++) {
                trace (a[i]);
        }
        trace ("");
        var b = matrixRotation (a);
        for (var i:Number = 0; i < b.length; i++) {
                trace (b[i]);
        }
        trace ("------------------------");
}
echo ([[1, 2], [3, 4]]);
echo ([[1, 2], [3, 4], [5, 6], [7, 8]]);
echo ([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
echo ([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]);


Скрипун 21.01.2008 23:26

Вложений: 1
Очень благодарю за код, но все таки он толи против часовой поворачивает, то-ли искажает... фигурки...

iNils 21.01.2008 23:40

Как и просили :)
87
65
43
21
а не
7531
8622

Скрипун 21.01.2008 23:46

ну да... с
Код:

Вместо
12
34
56
78
Надо получить
87
65
43
21

я промазал.
А как сделать чтоб было как на рисуночке, многоуважаемый iNils?

iNils 21.01.2008 23:49

Код:

function matrixRotation (arrayA:Array):Array {
        var arrayB:Array = new Array ();
        var len:Number = arrayA[0].length;
        for (var i:Number = 0; i < len; i++) {
                arrayB[i] = new Array ();
                for (var j:Number = 0; j < arrayA.length; j++) {
                        arrayB[i][j] = arrayA[j][i];
                }
                arrayB[i].reverse()
        }
        return arrayB;
}


Скрипун 22.01.2008 16:29

Код:

function matrixRotation (arrayA:Array):Array {
        var arrayB:Array = new Array ();
        var len:Number = arrayA[0].length;
        for (var i:Number = 0; i < len; i++) {
                arrayB[i] = new Array ();
                for (var j:Number = 0; j < arrayA.length; j++) {
                        arrayB[i][j] = arrayA[j][i];
                }
                arrayB[i].reverse()
        }
        return arrayB;
}

//задаем
trace(matrixRotation([[0,1],[0,0],[1,0],[0,2]])); //[0,1],[0,0],[2,0],[0,1]

:wacko:

ПС. конечно iNils, Вы дали мне хороший урок что быстрее было б открыть книжку по "Компьютерой графике" или какой-то математике и решить,но все же...

iNils 22.01.2008 17:01

Да не, на выходе не
[0,1],[0,0],[2,0],[0,1]
а
[0,1,0,0],[2,0,0,1]
:)


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

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