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

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

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

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
Question Алгоритм поворота объекта маркером относительно точки

Здравствуйте уважаемые as программисты. Такой вопрос: какой обычно применяют алгоритм поворота объекта угловым маркером вокруг заданной точки, как например это реализовано в инструменте Free Transform Tool .fla файла?


Последний раз редактировалось FieryWall; 13.11.2010 в 11:35. Причина: уточнение
Старый 13.11.2010, 12:02
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 2  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
если я правильно понял.
mtx и mty точка относительно которой вращать
angle угол в радианнах
Код AS3:
	graphic.rotation=angle * 180 / Math.PI;
				x1=(graphic.x-mtx)*Math.cos(angle)-(graphic.y-mty)*Math.sin(angle)+mtx;
				y1=(graphic.x-mtx)*Math.sin(angle)+(graphic.y-mty)*Math.cos(angle)+mty;
				graphic.x=x1;
				graphic.y=y1;
Напишите по понятней что должно получиться.

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

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
Вот такое надо реализовать

если бы точка трансформации стояла в центре - то квадрат вращался бы вокруг своей оси

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Может поможет такой вариант. Тут создаётся прямоугольник, который постоянно крутиться, а клик по сцене - задаёт новую точку вокруг которой он будет крутится.
Код AS3:
package 
{
	import fl.motion.MatrixTransformer;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author Samana
	 */
	public class Main extends Sprite 
	{
		//точка трансформации для mc
		private var center:Point = new Point(300, 300);
		//матрица
		private var matrix:Matrix = new Matrix();
		//угол на который будет поворачиваться mc
		private var ang:Number = 3;
		//сам спрайт mc
		private var mc:Sprite;
 
		public function Main():void 
		{
			//нарисовал спрайт прямоугольник
			mc = new Sprite();
			mc.graphics.beginFill(0x00FFcc);
			mc.graphics.drawRect(0, 0, 150, 80);
			mc.graphics.endFill();
			//передвинул сюда
			mc.x = 300;
			mc.y = 300;
 
			addChild(mc);
 
			stage.addEventListener(MouseEvent.CLICK, newPoint)
			stage.addEventListener(Event.ENTER_FRAME,rotate)
		}
		private function newPoint(e:MouseEvent):void 
		{
			//новая точка трансформации для поворота
			center.x = mouseX;
			center.y = mouseY;
		}
 
		private function rotate(e:Event):void 
		{
			//беру текущую матрицу mc
			matrix = mc.transform.matrix;
			//задаю нувую точку для поворота матрицы, и угол 
			MatrixTransformer.rotateAroundExternalPoint(matrix, center.x, center.y, ang);
			//применяю изменившуюся матрицу к mc
			mc.transform.matrix = matrix;
		}
	}
}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Алгоритм прост.
Код AS3:
package  ru.wolsh.display
{
	import flash.display.DisplayObject;
	import flash.geom.Point;
 
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */ 
	public function pointRotate (object:DisplayObject, center:Point, angle:Number) : void
	{
		var ra:Number = angle * Math.PI / 180;
 
		var dX:Number = center.x - object.x;
		var dY:Number = center.y - object.y;
 
		var dg:Number = Math.sqrt(dX * dX + dY * dY);
		var da:Number = Math.asin(dX / dg);
 
		object.rotation = angle;
 
		object.x = center.x - dg * Math.sin(da - ra);
		object.y = center.y - dg * Math.cos(da - ra);
	}
}
__________________
Reality.getBounds(this);

Старый 13.11.2010, 16:12
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Wolsh, то же, что и в 2, только хуже. Например из-за Math.asin(dX / dg)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Согласен. Тогда так
Код AS3:
package  ru.wolsh.display
{
	import flash.display.DisplayObject;
	import flash.geom.Point;
 
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */ 
	public function pointRotate (object:DisplayObject, center:Point, angle:Number) : void
	{
		var r:Number = angle * Math.PI / 180;
		var s:Number = Math.sin(r);
		var c:Number = Math.cos(r);
		var dX:Number = object.x - center.x;
		var dY:Number = object.y - center.y;
 
		object.rotation = angle;
		object.x = center.x + dX * c - dY * s;
		object.y = center.y + dX * s + dY * c;
	}
}
__________________
Reality.getBounds(this);

Старый 13.11.2010, 21:48
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 8  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
А можете пожалуйста прокомментировать? Я практик, мне надо, очень надо

Старый 13.11.2010, 22:08
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Ваш ВУЗ гуманитарный? Матрицы поворота должны на 2-м курсе проходить.
А так - гуглить преобразование поворота, матрицы поворота, аффинные преобразования.
Тут только аккуратное их применение. Начала аналита ж.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
Цитата:
Сообщение от -De- Посмотреть сообщение
Ваш ВУЗ гуманитарный? Матрицы поворота должны на 2-м курсе проходить.
А так - гуглить преобразование поворота, матрицы поворота, аффинные преобразования.
Тут только аккуратное их применение. Начала аналита ж.
Вы абсолютно правы))) Я как раз на втором курсе

Добавлено через 2 часа 8 минут
Мне как бы надо что бы для поворота надо было градус курсора относительно Point, т.е. градус объекта равен градус курсора. А в ваших примерах используется значение на которое изменяется градус объекта, это не подходит для реализации такого поворота.


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

Теги
AS3 , алгоритмы , маркер , поворот , трансформация

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

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


 


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


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