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

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

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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от goodguy Посмотреть сообщение
Ясно. Один вопрос отпал Спасибо
а что, есть второй?

Старый 12.02.2011, 22:41
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 12  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Его пока нет, но, думаю скоро появится И не один

Я только начал изучать векторы

Старый 13.02.2011, 03:15
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 13  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
М-да...

Код AS3:
		public function set length(value:Number):void {
			var _angle:Number = angle;
			_x = Math.cos(_angle) * value;
			_y = Math.sin(_angle) * value;
			if(Math.abs(_x) < 0.00000001) _x = 0;
			if(Math.abs(_y) < 0.00000001) _y = 0;
		}
		/**
		 * Returns the length of the vector.
		 **/
		public function get length():Number {
			return Math.sqrt(lengthSquared);
		}
Обе функции - очень плохие.

Длину надо кэшировать. Для того, чтобы можно было:

Код AS3:
	public function set length(value:Number):void {
		x *= value/_cashLength;
		y *= value/_cashLength;
 
		// Вот это всё-таки надо… Против глюков.
		if(Math.abs(_x) < 0.00000001) _x = 0;
		if(Math.abs(_y) < 0.00000001) _y = 0;
	}
 
	public function get length():Number {
		return _cashLength;
	}


Последний раз редактировалось semenyakinVS; 13.02.2011 в 03:16. Причина: Глючный тег [AS3]
Старый 13.02.2011, 08:50
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 14  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Длину надо кэшировать. Для того, чтобы можно было:
В чем смысл?

Старый 13.02.2011, 13:52
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 15  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Хм... Ну, как сказать. Вместо трёх тригонометрических функций и двух умножений имеем два умножения и два деления.

Старый 13.02.2011, 13:57
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 16  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Обе функции - очень плохие.
Не такие уж и плохие.
Не знаю, если бы это были какие-то сложнейшие функции, то может и был бы смысл их заменять, а так...

Старый 13.02.2011, 14:17
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 17  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Ладно... Объясню по-другому.

Я проверял быстродействие разных элементарных математический операций. Результаты (10000000 итераций):

(+): 819
(-): 748
(*): 775
(/): 856
(%): 1263
(cos): 3102
(atan2): 3807

Если честно, немного удивил результат для умножения и деления. До этого я получал другие показатели.

Код проверки:

Код AS3:
var iterCount:uint = 10000000;
 
var i:uint;
var time:Number;
var b:Number = Math.random();
 
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	i+b;
}
trace("(+): "+(getTimer()-time));
 
// =====================================
time = getTimer();
for(i = 1 ; i < iterCount ; i++)
{
	i-b;
}
trace("(-): "+(getTimer()-time));
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	i*i;
}
trace("(*): "+(getTimer()-time));
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	i/b;
}
trace("(/): "+(getTimer()-time));
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	b%i;
}
trace("(%): "+(getTimer()-time));
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	Math.cos(i);
}
trace("(cos): "+(getTimer()-time));
// =====================================
time = getTimer();
for(i = 1 ; i <= iterCount ; i++)
{
	Math.atan2(b,i);
}
trace("(atan2): "+(getTimer()-time));
// =====================================

Старый 13.02.2011, 15:01
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 18  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Раз пошла такая пьянка, то вот вам пища для размышления
Код AS3:
public class Vector2
{
	public function Vector2( x:Number=0.0, y:Number=1.0 )
	{
		this.x = x;
		this.y = y;
	}
 
	// fields
	public var x:Number;
	public var y:Number;
 
	// registers
	private static var $r_f01:Number;
 
 
	public function normalize( len:Number=1.0 ):void
	{
		$r_f01 = len / Math.sqrt(x*x + y*y);
 
		x *= $r_f01;
		y *= $r_f01;
	}
}

Старый 13.02.2011, 15:43
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 19  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
О!.. Кстати, давно хотел спросить - что вот это такое? $r_f01

Старый 13.02.2011, 15:47
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 20  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
не понял? обычная переменная вроде бы как..

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

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

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


 


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


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