Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-01-2007, 14:48   #1 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
[stuff] 3d butterfly curve

hallo zusammen,


inspiriert durch [je]´s butterfly curve, habe ich mich mal an die umsetzung
einer 3d butterfly curve in AS3 gemacht. Das ganze läuft bei mir mit 35fps
recht flott, hat allerdings einen Maximalwert von 18.39 für theta bei der
Iteration - bei allem darüber macht meine 3d umwandlung schlapp...

Ansehen & ´rumspielen.

´Runter damit.

Zum Copy´n´pasten:
Code:

/////////////////////////////////////////////////////
//  playing with butterfly curves
//	author : frank reitberger
//	site : http://www.dasprinzip.com
//  copyright 2007
/////////////////////////////////////////////////////


// --------------------------------------------------------------------------------------------------
 
 
stop();


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// butterfly curve global vars
///////////////////////////////////


var theta:Number = 0.0;
var xOld:Number;
var yOld:Number;
var xc:Number = 100;
var yc:Number = 100;
var zc:Number = 100;
var fl:Number = 400;
var radius:Number = 20;

var xa:Number = (stage.mouseY)*.001;
var ya:Number = (stage.mouseX)*.001;
var cosx:Number = Math.cos(xa);
var cosy:Number = Math.cos(ya);
var sinx:Number = Math.sin(xa);
var siny:Number = Math.sin(ya);


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// simple (stupid) curve coloring
///////////////////////////////////

function fillButterfly(v:Number) {
	
	if (stage.mouseX < 200 && stage.mouseY < 200) {

		var r:Number=0x7F+Math.sin(v)*0x7F;
		var g:Number=0x7F+Math.sin(v)*0x7F;
		var b:Number=0x7F+Math.sin(v)*0x7F;		
	
	}	
	
	if (stage.mouseX > 200 && stage.mouseY < 200) {

		var r:Number=0x7F+Math.sin(v)*0x7F;
		var g:Number=0x7F+Math.atan(v)*0x7F;
		var b:Number=0x7F+Math.cos(v)*0x7F;		
	
	}
	
	if (stage.mouseX < 200 && stage.mouseY > 200) {

		var r:Number=0x7F+Math.atan(v)*0x7F;
		var g:Number=0x7F+Math.sin(v)*0x7F;
		var b:Number=0x7F+Math.cos(v)*0x7F;		
	
	}
	
	if (stage.mouseX > 200 && stage.mouseY > 200) {

		var r:Number=0x7F+Math.atan(v)*0x7F;
		var g:Number=0x7F+Math.cos(v)*0x7F;
		var b:Number=0x7F+Math.atan(v)*0x7F;		
	
	}		
	
	return 0xFF000000 | (r & 0xFF) <<16 | (g & 0xFF) <<8 | (b & 0xFF);	

}


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// update clip coordinates
///////////////////////////////////


function repaintButterfly() {
	
	for (var i:Number = 3; i < stage.numChildren; i++) {
		
		p0 = stage.getChildAt(i);
		
		if (String(p0.name).indexOf("butterfly",0) != -1) {
			
			p0.graphics.clear();
			
			var x1 = p0.x_*cosy-p0.z_*siny;
			var za = p0.z_*cosy+p0.x_*siny;
			var y1 = p0.y_*cosx-za*sinx;
			var z1 = za*cosx+p0.y_*sinx;
			
			p0.x_ = x1;
			p0.y_ = y1;
			p0.z_ = z1;
			
			
			var scale = fl/(fl+p0.z_+zc);
			
			p0.x = xc+p0.x_*scale;
			p0.y = yc+p0.y_*scale;	
			
			var u:Number = i * 24 * Math.PI/ stage.numChildren;
		
			var col = fillButterfly(u);			
			
			p0.graphics.lineStyle(1,col,1);
			p0.graphics.drawRect(p0.x,p0.y,.5,.5);
			
		}
	}

}

// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// paint 3d curve 
///////////////////////////////////

function paintButterfly(event:Event) {

	var xa = (stage.mouseY-200)*.001;
	var ya = (stage.mouseX-200)*.001;
	cosx = Math.cos(xa);
	cosy = Math.cos(ya);
	sinx = Math.sin(xa);
	siny = Math.sin(ya);
	
	repaintButterfly();
}


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// initialize butterfly curve
///////////////////////////////////


while (theta < 18.39) {
	
	r = Math.exp(Math.cos(theta)) - (2 * Math.cos(4*theta)) + (Math.sin(theta/12))*5;
	
	x_ = r * Math.cos(theta);
	y_ = r * Math.sin(theta);
	z_ = r * Math.abs(y_) / 2;
	
	xx = (x_*7);
	yy = (y_*7);
	
	var p:MovieClip = new MovieClip();
	p.name = "butterfly" + String(theta);
	stage.addChild(p);
	
	p.x_ = xx;
	p.y_ = yy;
	p.z_ = z_;
	
	p.x = xx;
	p.y = yy;
	
	
	xOld = xx;
	yOld = yy;
	
	theta = theta + 0.01;
}

// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// paint on enter frame
///////////////////////////////////

stage.addEventListener(Event.ENTER_FRAME, paintButterfly);
pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 03-01-2007, 15:22   #2 (permalink)
Euer Nuser
 
Benutzerbild von ~pyropete~
 
Registriert seit: Apr 2004
Ort: Sand-City
Beiträge: 3.483
Feines Teil - aber ruckelt ziemlich bei mir, meine Maschine
is schon a bisserl älter, XP1500+,256Ram.

Einen kleinen Vorschlag hätte ich noch, weil der Übergang
der Farben noch arg hart rüberkommt - da könnte doch noch
ein wenig smoothness rein.

Ansonsten schick!

--pp
~pyropete~ ist offline   Mit Zitat antworten
Alt 16-09-2007, 16:58   #3 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
wer keinen schmetterlinge - wohl aber blumen mag:

chrysanthemum curve

pwd
__________________
Blog/Lab Xing
pwdVergesser 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 19:16 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele