L System (rappresentazioni grafiche)

Ecco alcune delle immagini ottenute:




Ed ecco la classe completa:


// Fern Fractal Nicola Sirago - an - Jim Bumgardner 2008 -port
package 
{
 import flash.geom.*;
 import GeomUtil;
 import flash.events.Event;
 import flash.display.DisplayObject;
 import flash.display.Sprite;

 public class FernSprite2 extends Sprite
 {
  var maxLevels:Number// = 6;
  var initBendAngle:Number// = 15;
  var initBranchAngle:Number// = 37;
  var trunkRatio:Number// = .1;
  var branchRatio:Number// = .4;
  var heightScale:Number// = 2.5;
  var regularity:Number// = 1;
  var offshoot:Number// = 1;
  
  public function FernSprite2(initObj)
  {
   maxLevels = initObj.maxLevels;
   initBendAngle = initObj.initBendAngle;
   initBranchAngle = initObj.initBranchAngle;
   trunkRatio = initObj.trunkRatio;
   branchRatio = initObj.branchRatio;
   heightScale = initObj.heightScale;
   regularity = initObj.regularity;
   offshoot = initObj.offshoot;
   initObj.parMC.addChild(this);
  }
  public function drawFern(p,a,rad,level)
  {
   var c:Point = new Point(p.x + Math.cos(a) * rad * trunkRatio, p.y + Math.sin(a) * rad * trunkRatio);
   p.height = Point.distance(new Point (p.x,p.y), c);
   p.width = (level + 1)*trunkRatio*30
   p.rotation = GeomUtil.radToGrad(a)-90;
   this.addChild(p);
   if (level > 0) {
    a += bendAngle;
    level--;
    var b1:ramo = new ramo;
    var b2:ramo = new ramo;
    var b3:ramo = new ramo;
    b1.x = b2.x = b3.x = c.x;
    b1.y = b2.y = b3.y = c.y;
    if(randRange(0,offshoot))
    drawFern(b1, a - branchAngle * randRange2(1, regularity), rad * branchRatio * randRange2(1, regularity), level);
    if(randRange(0,offshoot))
    drawFern(b2, a + branchAngle * randRange2(1, regularity), rad * branchRatio * randRange2(1, regularity), level);
    if(randRange(0,offshoot))
    drawFern(b3,a * randRange2(1, regularity),rad*antiTrunkRatio * randRange2(1, regularity),level);
   }else {
    var f:foglie = new foglie; 
    f.x = c.x;
    f.y = c.y;
   // f.rotation = p.rotation
    if(randRange(0,offshoot))
    this.addChild(f);
   }
  }
  public function redrawFern()
  {
   bendAngle = initBendAngle*Math.PI/180;
   branchAngle = initBranchAngle*Math.PI/180;
   lastMaxLevels = maxLevels;
   antiTrunkRatio = 1-trunkRatio;
   startAngle = -Math.PI/2;
   var b:t2 = new t2;
   drawFern(b, startAngle, heightScale, maxLevels);
  }
  public static function randRange(min:Number, max:Number):Number {
   var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
   return randomNum;
  }
  public static function randRange2(min:Number, max:Number):Number {
   if (min == max)
   return min
   var d = 0
   while (d == 0) { d = randRange( -1, 1) }
   var randomNum:Number =Math.abs( Math.random() * (max - min) + min * d);
   return randomNum;
  }
 }
}

Per modificare le texture basta modificare i disegni all'interno dei movieclip "ramo" e "foglie"

0 comments:

Posta un commento