• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-06-2007, 12:13   #1 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Lorenz attractor spectrum


Das ganze kann man sich auch einfach live anschauen.

Hier der Code. Übrigens im LorenzPlotter kann ich n auch getrost auf 80.000 setzen

Code:
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.display.Sprite;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.filters.BlurFilter;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.media.Sound;
	import flash.media.SoundMixer;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;

	[SWF(width='640',height='480',frameRate='255',backgroundColor='0x000000')]
	public class LorenzSpectrum extends Sprite
	{
		[Embed(source='/assets/pal.png')]
		private const COLOR_MAP: Class;
		
		private const origin: Point = new Point;
		private const reg: Point = new Point( 320, 240 );
		
		private var palette: Array;
		private var screen: BitmapData;
		private var buffer: BitmapData;
		private var plotter: LorenzPlotter;
		private var t: Number;
		
		private var colorFx: Matrix;
		private const roto: Matrix = new Matrix;
		private var colorDamp: ColorTransform;
		
		private var spectrum: ByteArray;

		public function LorenzSpectrum()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.quality = StageQuality.LOW;
			
			var colorMap: BitmapData = Bitmap( new COLOR_MAP ).bitmapData;
			palette = new Array( 0x100 );
			for ( var i: int = 0; i < 0x100; ++i )
				palette[ i ] = colorMap.getPixel( i, 0 );
			palette[ 0 ] = 0;
			
			t = 0;
			
			var scl: Number = .25;
			colorFx = new Matrix;
			colorFx.a = ( 500 + scl ) / 500;
			colorFx.d = ( 500 + scl ) / 500;
			colorFx.tx = -scl;
			
			colorDamp = new ColorTransform( .87, .71, .86 );
			
			screen = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0 )
			buffer = screen.clone();
			buffer.lock();
			
			plotter = new LorenzPlotter( buffer );
			addChild( new Bitmap( screen ) );
			
			spectrum = new ByteArray;
			
			var sound: Sound = new Sound( new URLRequest( 'sound.mp3' ) );
			sound.play();
			
			addEventListener( Event.ENTER_FRAME, enterFrame );
		}
		
		private function enterFrame( event: Event ): void
		{
			var i: int, a: Number, b: Number, c: Number;
			
			SoundMixer.computeSpectrum( spectrum, true );
			
			t += .1;
			
			plotter.reset();
			
			for ( i = 0, a =0 ; i < 0x20; ++i )
				a += spectrum.readFloat();
			spectrum.position = 0x100 * 4;
			for ( i = 0; i < 0x20; ++i )
				a += spectrum.readFloat();
			a *= ( 1 / 0x40 );
						
			if ( a > .32 )
			{
				plotter.scaleX += 6;
				plotter.scaleY += 6;
			}
			
			plotter.scaleX -= ( plotter.scaleX - 4 ) * .5;
			plotter.scaleY -= ( plotter.scaleY - 4 ) * .5;
			
			spectrum.position = 0x40 * 4;
			for ( i = 0, a = 0; i < 0x80; ++i )
				a += spectrum.readFloat();
			a *= ( 1 / 0x20 );
			c = b = a;
			plotter.a = 10 - 10 * a;
			
			spectrum.position = 0x140 * 4;
			for ( i = 0, a = 0; i < 0x80; ++i )
				a += spectrum.readFloat();
			a *= ( 1 / 0x20 );
			b += a;
			
			plotter.b = 20 + 8 * a;
			plotter.c += b * ( 5 / 2 );
			plotter.c -= ( plotter.c - ( 8 / 3 ) ) * .5;
			
			b = -a;
			SoundMixer.computeSpectrum(spectrum);
			for( i = 0, a = 0; i < 0x200; ++i )
				a += Math.abs( spectrum.readFloat() );
			
			plotter.h -= ( plotter.h - ( .002 + ( .02 - .002 ) * ( a / 0x80 ) ) ) * .125;
			
			plotter.render();
			
			colorDamp.greenMultiplier = .71 + Math.sin( t ) * .2;
			
			screen.draw( screen, colorFx, colorDamp, BlendMode.NORMAL );
			screen.applyFilter( screen, screen.rect, origin, new BlurFilter( 8, 8, 3 ) );
			
			buffer.paletteMap( buffer, buffer.rect, origin, null, null, palette );
			roto.identity();

			roto.rotate( c * 1.25 );
			roto.rotate( b * 1.25 );

			var offset: Point = reg.subtract( roto.transformPoint( reg ) );
			
			roto.tx = offset.x;
			roto.ty = offset.y;

			screen.draw( buffer, roto, null, BlendMode.ADD );
		}
	}
}

import flash.display.BitmapData;

class LorenzPlotter
{
	private const n: int = 8000;
	
	public var h: Number;
	public var a: Number;
	public var b: Number;
	public var c: Number;
	
	public var scaleX: Number;
	public var scaleY: Number;
	
	private var x0: Number;
	private var y0: Number;
	private var z0: Number;
	
	private var x1: Number;
	private var y1: Number;
	private var z1: Number;
	
	private var i: int;
	
	private var output: BitmapData;
	
	public function LorenzPlotter( output: BitmapData )
	{
		this.output = output;
		scaleX = scaleY = 8;
		h = .01;
		a = 10;
		b = 28;
		c = 8/3;
		reset();
	}
	
	public function reset(): void
	{
		x0 = 0,
		y0 = 2,
		z0 = 12;
		
		output.fillRect( output.rect, 0 );
	}
	
	public function render(): void
	{
		i = 0;
		
		while ( i < n )
		{
			x1 = x0 + h * a * ( y0 - x0 ),
			y1 = y0 + h * ( x0 * ( b - z0 ) - y0 ),
			z1 = z0 + h * ( x0 * y0 - c * z0 );

			x0 = x1,
			y0 = y1,
			z0 = z1;
			
			x1 *= scaleX,
			y1 *= scaleY;
			
			x1 += 320,
			y1 += 240;
			
			z1 = z1 * 8;
			
			if ( z1 < 0 ) z1 = -z1;
			
			if ( x1 < 0 || x1 > 640 || y1 < 0 || y1 > 480 )
			{
				++i;
				continue;
			}
				
			if ( z1 > 0xff )
				z1 = 0xff;
				
			output.setPixel( x1, y1, z1 );
			
			++i;
		}
	}
}
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:18   #2 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
schick.

pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:22   #3 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
schön schnell, genial!
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:26   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.888
Jau - hübsch. Habe mich aber sowas von erschrocken, als da ohne Vorwarnung die Mukke losgeballert hat...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:26   #5 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
gut schauts aus.. super performant!
grüße, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:27   #6 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
Zitat:
Zitat von Der Frager Beitrag anzeigen
Jau - hübsch. Habe mich aber sowas von erschrocken, als da ohne Vorwarnung die Mukke losgeballert hat...
so solls sein. (war glaub ich von [je] gewollt)
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 18-06-2007, 14:46   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Ort: Nürnberg
Beiträge: 884
Zitat:
Zitat von georgem Beitrag anzeigen
(war glaub ich von [je] gewollt)


cooles teil
Beck ist offline   Mit Zitat antworten
Alt 18-06-2007, 18:53   #8 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.248
ja, durchaus geil!
von wem issn die mucke eigentlich?
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 18-06-2007, 21:51   #9 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Banlieue 13
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 18-06-2007, 23:12   #10 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.248
daher kannte ich die musik auch ...
ich wusste doch, daß ich das schonmal gehört hab.

danke!
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele