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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.01.2017, 13:38
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 21  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
а в релизном трейсы не работают

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

Регистрация: Mar 2007
Сообщений: 319
выводи в TextField

Старый 15.01.2017, 13:50
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 23  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
не знаю у кого как, но у меня в релизном кажет:
Цитата:
test1:45
test2:27
test3:19
Добавлено через 32 секунды
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
 
	/**
	 * ...
	 * @author 
	 */
	public class Main extends Sprite 
	{
		private var tf:TextField;
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			tf = new TextField();
			removeEventListener(Event.ADDED_TO_STAGE, init);
			var test:TestBitmap = new TestBitmap();
			var res:Object;
			res = test.test();
			addChild(test);
			for (var s:String in res)
				tf.appendText(s + ":" + res[s] + "\n");
			addChild(tf);
		}
 
	}	
}
Добавлено через 1 минуту
Код AS3:
package 
{
	/**
	 * ...
	 * @author 
	 */
	import flash.display.*;
	public class TestBitmap extends Sprite
	{
		public function TestBitmap()
		{
			super();
		}
		function test():Object {
			var res:Object = {};
			res.test1 = test1();
			res.test2 = test2();
			res.test3 = test3();
			return res;
		}
		private function test1():Number
		{
			var seed:int = Math.random() * 123456789;
			function random(min:Number = 0.0, max:Number = 1.0):Number
			{
				seed = (seed * 9301 + 49297) % 233280;
				var rnd:Number = seed / 233280;
				return min + rnd * (max - min);
			}
			var res:Number = (new Date()).getTime();
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			for (var i:int = 0; i < 100000; i++) 
			{
				bitmapData.setPixel(random(0, 200), random(0, 200), random(0, 0xffffff));
			}
			//trace("test1", (new Date()).getTime() - ts);
			res = new Date().getTime() - res;
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 0;
			addChild(bitmap);
			return res;
		}
 
		private function test2():Number
		{
			var seed:int = Math.random() * 123456789;
			function random(max:int):Number
			{
				seed = (seed * 16807) % 0x7fffffff;
				return seed % max;
			}
 
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var res:Number = (new Date()).getTime();
			for (var i:int = 0; i < 100000; i++) 
			{
				bitmapData.setPixel(random(200), random(200), random(0xffffff));
			}
			res = new Date().getTime() - res;
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 200;
			bitmap.y = 0;
			addChild(bitmap);
			return res;
		}
 
		private function test3():Number
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var res:Number = (new Date()).getTime();
			for (var i:int = 0; i < 100000; i++) 
			{
				bitmapData.setPixel(Math.random() * 200, Math.random() * 200, Math.random() * 0xffffff);
			}
			res = new Date().getTime() - res;
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 200;
			addChild(bitmap);
			return res;
		}
	}
}
Добавлено через 6 минут
вывод - нефиг изобретать велосипед

Старый 15.01.2017, 14:09
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 24  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Цитата:
Сообщение от undefined Посмотреть сообщение
вывод - нефиг изобретать велосипед
есть такие задачи, где должен быть детерминированный рандом, которые нельзя решить нативным рандомом. например клиент-серверная симуляция (бой в RTS/TBS), где с идентичными входными данными должен быть одинаковых результат

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

Регистрация: Mar 2007
Сообщений: 319
Нашел еще один вариант:
Код AS3:
private static var seed1:int = getTimer();
public static function random1 ():Number
{
	seed1 = (seed1 * 214013 + 2531011) % 0x7fffffff;
	return seed1 / 0x7fffffff;
}
И еще один из недр tamarin-central перевел на AS3, он должен быть идентичен флешовому, но выглядит страшно:
Код AS3:
private static var seed:uint = getTimer();
public static function random3 ():Number
{
	var aNum:uint = (seed = ((seed & 1) ? ((seed >> 1) ^ 0x48000000) : (seed >> 1))) * 71;
	aNum = ((aNum << 13) ^ aNum) - (aNum >> 21);
	var iResult:uint = (aNum * int(aNum * aNum * 15731 + 789221) + 1376312589) & 0x7fffffff;
	iResult += aNum;
	iResult = ((iResult << 13) ^ iResult) - (iResult >> 21);
	return (iResult & 0x7fffffff) / (0x7fffffff + 1.0);
}
Test:
Код AS3:
	[SWF(width = "400", height = "500")]
	public class Test2 extends Sprite
	{
		private var text:TextField;
 
		public function Test2 ()
		{
			super();
 
			text = new TextField();
			text.y = 400;
			text.height = 100;
			addChild(text);
 
			test1();
			test2();
			test3();
			test4();
		}
 
		private static var seed1:int  = getTimer();
		public static function random1 ():Number
		{
			seed1 = (seed1 * 214013 + 2531011) % 0x7fffffff;
			return seed1 / 0x7fffffff;
		}
 
		private function test1 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random1() * 200, random1() * 200, random1() * 0xffffff);
			}
			text.appendText("test1 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 0;
			addChild(bitmap);
		}
 
		private static var seed2:int  = getTimer();
		public static function random2 ():Number
		{
			seed2 = (seed2 * 16807) % 0x7fffffff;
			return seed2 / 0x7fffffff;
		}
 
		private function test2 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random2() * 200, random2() * 200, random2() * 0xffffff);
			}
			text.appendText("test2 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 200;
			bitmap.y = 0;
			addChild(bitmap);
		}
 
		private static var seed3:uint = getTimer();
		public static function random3 ():Number
		{
			var aNum:uint = (seed3 = ((seed3 & 1) ? ((seed3 >> 1) ^ 0x48000000) : (seed3 >> 1))) * 71;
			aNum = ((aNum << 13) ^ aNum) - (aNum >> 21);
			var iResult:uint = (aNum * int(aNum * aNum * 15731 + 789221) + 1376312589) & 0x7fffffff;
			iResult += aNum;
			iResult = ((iResult << 13) ^ iResult) - (iResult >> 21);
			return (iResult & 0x7fffffff) / (0x7fffffff + 1.0);
		}
 
		private function test3 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random3() * 200, random3() * 200, random3() * 0xffffff);
			}
			text.appendText("test3 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 200;
			addChild(bitmap);
		}
 
		private function test4 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(Math.random() * 200, Math.random() * 200, Math.random() * 0xffffff);
			}
			text.appendText("test4 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 200;
			bitmap.y = 200;
			addChild(bitmap);
		}
	}
Изображения
 

Старый 15.01.2017, 17:04
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 26  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Nooob Посмотреть сообщение
Zebestov твой вариант рандома не лучше нативного
Во-первых, не мой, а используемый мною в моих проектах.
Во-вторых, лучше, например, в деле перемешивания небольших массивов. Натив мешает отвратительно.
В-третьих, лучше уже хотя бы потому, что имеет повторяемость при одном и том же seed (это ты и сам указал чуть позже, да)
Такова практика.
Алгоритмы "идентичные нативному" беру на карандаш. Но опять же, как раз во втором пункте они работают хуже, так что я даже рад тому, как мешает выбранный мной когда-то первый вариант.
Годная тема поднялась! Много полезного ) топикстартер, поди, в шоке!
__________________
Поймай яблоко 2!

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

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Натив мешает отвратительно.
Какие могут быть требования к белому шуму?Кстати,неплохо было бы построить спектр приведенных тут методов.

Старый 15.01.2017, 17:47
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 28  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Требование: "максимально рассыпчато" перемешать массив из N нулей и M единиц.
– Вариант, который выбрал я и который кочует у меня из AS в JS — отлично!
– Нативный рандом — кол!
__________________
Поймай яблоко 2!

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

Регистрация: Oct 2006
Сообщений: 2,281
а ну это критерий нравится/не нравится, его не проверишь

Старый 15.01.2017, 17:56
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 30  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Нет. Это критерий минимальной длины неперемешанных рядов единиц и нулей.
__________________
Поймай яблоко 2!

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

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

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


 


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


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