Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.01.2008, 22:00
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 1  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
По умолчанию поворот матрицы относительно некой точки

Добрый день всезнающие, многоуважаемые и любимые тов. по 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_;
     }
Это поворачивает фигуру, но почему-то еще и отзеркаливает (а мне не надо) мне надо как в тетрисе фигурки ворочатся.
Товарищи. как это сделать?
__________________
Flash в крови


Последний раз редактировалось Скрипун; 21.01.2008 в 22:23.
Старый 21.01.2008, 22:19
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Вместо
12
34
56
78
Надо получить
87
65
43
21
?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.01.2008, 22:26
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 3  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Цитата:
Сообщение от iNils
Вместо
12
34
56
78
Надо получить
87
65
43
21
?
Да! Если знаете, подскажите
__________________
Flash в крови

Старый 21.01.2008, 22:48
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код:
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]]);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.01.2008, 23:26
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 5  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Очень благодарю за код, но все таки он толи против часовой поворачивает, то-ли искажает... фигурки...
Изображения
 
__________________
Flash в крови


Последний раз редактировалось Скрипун; 21.01.2008 в 23:36.
Старый 21.01.2008, 23:40
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Как и просили
87
65
43
21
а не
7531
8622
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 21.01.2008 в 23:50.
Старый 21.01.2008, 23:46
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 7  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
ну да... с
Код:
Вместо
12
34
56
78
Надо получить
87
65
43
21
я промазал.
А как сделать чтоб было как на рисуночке, многоуважаемый iNils?
__________________
Flash в крови

Старый 21.01.2008, 23:49
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код:
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;
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 22.01.2008, 16:29
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 9  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Код:
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]


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

Старый 22.01.2008, 17:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Да не, на выходе не
[0,1],[0,0],[2,0],[0,1]
а
[0,1,0,0],[2,0,0,1]
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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