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

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

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

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ
По умолчанию поворот вектора на заданный угол

У меня есть такая функция для поворота точек вокруг оси Y:

Код AS1/AS2:
rotateY = function (targed, degree):Void {
	var newAngle:Number = degree*rad;
	var sin = Math.sin(newAngle);
	var cos = Math.cos(newAngle);
	for (var i = 0; i<4; i++) {
		var x = cos*targed.vertex[i].x-sin*targed.vertex[i].z;
		var z = cos*targed.vertex[i].z+sin*targed.vertex[i].x;
		targed.vertex[i].z = z;
		targed.vertex[i].x = x;
	}
};
У меня есть функция которая плавно меняет параметр Angle у моего объекта.

Код AS1/AS2:
var myTween:Tween = new Tween(rektangl, "Angle", Strong.easeOut, 90, 0, 3, true);
	myTween.onMotionChanged = function() {
		rotateY(rektangl,rektangl.Angle);
		render(rektangl);
	};
Но эффект получается не тот. Объект начинает вращаться как сумашедший пока Angle не будет равным 0. Получается что параметр degree работает скорее как скорость вращения чем как угол. Что нужно изменить в функции rotateY чтобы параметр degree менял угол не относительно а абсолютно?
__________________
Он манэ падмэ ХУМ!

Старый 23.03.2009, 20:10
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
такая функция поворота не годится для твина угла, она никак не связана с абсолютным углом, а только поворачивает на заданный угол

зная на сколько надо повернуть можно в цикле (onEnterFrame|setInterval) вызвать ее нужное количество раз с постоянным значением поворота

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

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ
Я пробовал вот так. Но явно чето не то в плане трегонометрии. И при обратном вращении артефактоф много:

Код AS1/AS2:
function rotateYto(targed, a) {
 
	var newAngle:Number = a*rad;
	var sin = Math.sin(newAngle);
	var cos = Math.cos(newAngle);
	var x = targed.vertex[0].x;
	var z = targed.vertex[0].z;
	var R = Math.sqrt(x*x+z*z);
	var _b = a*rad;
	for (var i = 0; i<4; i++) {
		x = Math.cos(_b)*R;
		z = Math.sqrt(R*R-x*x);
		if (targed.vertex[i].x<0) {
			x = 0-x;
			z = 0-z;
		}
		targed.vertex[i].z = z;
		targed.vertex[i].x = x;
	}
 
	render(rektangl);
}


Добавлено через 65 часов 58 минут
Поворот точек на заданный угол.
вот как получилось:

Код AS1/AS2:
function rotateYto(targed, a) {
	var R = targed.Width/2;
	var _b = a*rad;
 
	for (var i = 0; i<4; i++) {
		x = Math.cos(_b)*R;
		z = Math.sin(_b)*R;
		if (targed.vertex[i].x<0) {
			x = 0-x;
			z = 0-z;
		}
		targed.vertex[i].z = z;
		targed.vertex[i].x = x;
	}
	render(rektangl);
}
__________________
Он манэ падмэ ХУМ!

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

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

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


 


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


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