forked from: Lines
@author kris@neuroproductions.be
// forked from neuro's Lines
// forked from neuro's flash on 2009-4-30
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Point;
/**
* @author kris@neuroproductions.be
*/
public class Main extends Sprite
{
private var h:int =1000
private var w:int =1000
private var bmp : BitmapData = new BitmapData(100, 100, false, 0);
private var resultbmd : BitmapData = new BitmapData(1000, 1000, true, 0);
private var arr : Array = new Array();
private var px1 : Number = 0;
private var holder:Sprite =new Sprite()
private var rseed:int
public function Main()
{
stage.align = StageAlign.TOP_LEFT;
//stage.scaleMode = StageScaleMode.NO_SCALE;
var bg : Sprite = new Sprite()
bg.graphics.beginFill(0x0)
bg.graphics.drawRect(0, 0, w, h)
addChild(bg)
var bm:Bitmap = new Bitmap(bmp)
bm.width = w
bm.height =h
// addChild(bm)
rseed =Math.random()*1000
addChild(holder)
var resultBm:Bitmap =new Bitmap(resultbmd)
resultBm.smoothing =true
addChild(resultBm)
for (var i : Number = 0; i < 50 ; i++)
{
var l:int=arr.length
var dp : DrawPoint = new DrawPoint(Math.random() * 200, Math.random() * 200)
if (l<12)
{
dp.color = 0xcc0000 +(l*0x990000)
}
else
{
dp.color = 0x770000+ (l*0xcc0000)
}
arr.push(dp)
holder.addChild(dp.holder)
}
this.addEventListener(Event.ENTER_FRAME, loop)
}
public function loop(e:Event) :void
{
bmp.perlinNoise(40, 40, 3,rseed, true, true, 2 | 1, false, [new Point(px1 += 1, 0),new Point(-px1 / 2, 0),new Point(0, 0)]);
for each(var c:DrawPoint in arr)
{
c.holder.graphics.clear()
c.xOld = c.x
c.yOld = c.y
var rgb24 : uint = bmp.getPixel(c.x * .1, c.y * .1);
if(rgb24 > 0)
{
c.x += (128 - (rgb24 >> 16)) / 2;
c.y += (128 - ((rgb24 ^ (rgb24 >> 16 << 16)) >> 8)) / 2;
}
c.x += (400 - c.x) /200;
c.y += (400- c.y) /200;
for each(var b:DrawPoint in arr) if(b != c && Point.distance(c.point, b.point) < 30)
{
var ang : Number = Math.atan2(c.y - b.y, c.x - b.x);
c.x += ((b.x + Math.cos(ang) * 100) - c.x) / 20;
c.y += ((b.y + Math.sin(ang) * 100) - c.y) / 20;
}
var dist:Number = Point.distance(c.point, new Point(c.xOld,c.yOld))
dist =((50 -dist) / c.size)
var hoekRad : Number = Math.atan2(c.y - c.yOld, c.x - c.xOld)
var newHoek : Number = hoekRad - ( Math.PI / 2)
c.point1 = Point.polar(dist, newHoek) ;
c.point1.x += c.xOld
c.point1.y += c.yOld
c.point2 = Point.polar(-dist, newHoek) ;
c.point2.x += c.xOld
c.point2.y += c.yOld
c.hoek = newHoek
var fillcolor:uint =c.color-(0xcc0000*Math.round(c.y/15))//0xFF0000//fotobmd.getPixel(c.x,c.y)
c.holder.graphics.lineStyle(1,fillcolor, 5);
c.holder.graphics.beginFill(fillcolor, 1);
c.holder.graphics.moveTo(c.point1.x,c.point1.y);
c.holder.graphics.lineTo(c.point2.x,c.point2.y);
if (c.point3 != null)
{
c.holder.graphics.lineStyle(1,0xffffff, 1);
c.holder.graphics.lineTo(c.point4.x,c.point4.y);
c.holder.graphics.lineStyle(1,0xffffff,0);
c.holder.graphics.lineTo(c.point3.x,c.point3.y);
c.holder.graphics.lineStyle(1,0xffffff, 1);
c.holder.graphics.lineTo(c.point1.x,c.point1.y);
}
c.point3 = c.point1
c.point4 = c.point2
resultbmd.draw(c.holder)
}
if(Math.random()<0.1){
}
}
}
}
import flash.geom.Point;
import flash.display.Sprite
class DrawPoint
{
public var x : Number
public var y : Number
public var xOld : Number
public var yOld : Number
public var point1:Point
public var point2:Point
public var point3:Point
public var point4:Point
public var hoek:Number
public var size:Number
public var holder : Sprite = new Sprite()
public var color:uint =0xff6600
public function DrawPoint(x : Number,y : Number)
{
this.x = x
this.y = y
size =(Math.random()*6)+1
}
public function get point() : Point
{
return new Point(x, y)
}
}