I found a Jackson Pollock style painting example written in AS2 called ‘Splatter’ over at stamen.com. I wanted to include a Pollock style brush in my painting application so I converted it into AS3. Just copy and past the following code into a new AS3 document in Flash.
import flash.events.MouseEvent;
import flash.display.MovieClip;
//set up some vars
var new_size_influence:Number = 0.5;
var mid_point_push:Number = 0.75;
var max_line_width:Number = (Math.random() * 50) + 50;
//vars for line colour and alpha
var _colour:uint = 0x000000;
var _alpha:Number = 1;
//create var to hold all mouse position data
var obj:Object = new Object();
obj.x = 0;
obj.y = 0;
obj.start_x = obj.mid_x = obj.end_x = (stage.stageWidth / 2);
obj.start_y = obj.mid_y = obj.end_y = (stage.stageHeight / 2);
obj.size = 0;
//add mouse down event listener
stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
function onDown(e:MouseEvent):void
{
//create random colour
_colour = Math.random()*0xFFFFFF;
//set all line data to current mouse position
obj.start_x = obj.mid_x = obj.end_x = mouseX;
obj.start_y = obj.mid_y = obj.end_y = mouseY;
//add mouse up and mouse move event listeners
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
}
function onUp(e:MouseEvent):void
{
//remove mouse up and mouse move event listeners
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
}
function onMove(e:MouseEvent):void
{
//find the mid point between current and last mouse position
obj.mid_x = ((obj.end_x - obj.start_x) * (1 + mid_point_push)) + obj.start_x;
obj.mid_y = ((obj.end_y - obj.start_y) * (1 + mid_point_push)) + obj.start_y;
//set start to last point
obj.start_x = obj.end_x;
obj.start_y = obj.end_y;
//set end to current point
obj.end_x = mouseX;
obj.end_y = mouseY;
//get distance between start and end point
var distance:Number = Math.sqrt(Math.pow((obj.end_x - obj.start_x), 2) + Math.pow((obj.end_y - obj.start_y), 2));
//set size depending on distance
var new_size:Number = max_line_width / distance;
obj.size = (new_size_influence * new_size) + ((1 - new_size_influence) * obj.size);
//draw the line
graphics.lineStyle(obj.size,_colour,_alpha);
graphics.moveTo(obj.start_x, obj.start_y);
graphics.curveTo(obj.mid_x, obj.mid_y, obj.end_x, obj.end_y);
// splotch
var dd:Number = Math.sqrt(Math.pow((obj.end_x - obj.start_x), 2) + Math.pow((obj.end_y - obj.start_y), 2));
for (var i:int = 0; i < Math.floor(5*Math.pow(Math.random(), 4)); i++)
{
// positioning of splotch varies between ±4dd, tending towards 0
var splat_range:int = 1;
var x4:Number = dd * 1 * (Math.pow(Math.random(), splat_range) - (splat_range / 2));
var y4:Number = dd * 1 * (Math.pow(Math.random(), splat_range) - (splat_range / 2));
// direction of splotch varies between ±0.5
var x5:Number = Math.random() - 0.5;
var y5:Number = Math.random() - 0.5;
var d_:Number = obj.size * (0.5 + Math.random());
//draw the splotches
graphics.lineStyle(d_, _colour, _alpha);
graphics.moveTo((obj.start_x + x4), (obj.start_y + y4));
graphics.lineTo((obj.start_x + x4 + x5), (obj.start_y + y4 + y5));
}
}