| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| habs vergessen 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); |
| | |
| | #2 (permalink) |
| Euer Nuser 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
__________________ Die Krinimalpolizei gibt bekannt: |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |