79 lines
2.4 KiB
ActionScript
79 lines
2.4 KiB
ActionScript
package {
|
|
|
|
import flash.display.GraphicsPathCommand;
|
|
import flash.display.Sprite;
|
|
|
|
/**
|
|
* A Sierpinski triangle.
|
|
*/
|
|
public class SierpinskiTriangle extends Sprite {
|
|
|
|
/**
|
|
* Creates a new SierpinskiTriangle object.
|
|
*
|
|
* @param n The order of the Sierpinski triangle.
|
|
* @param c1 The background colour.
|
|
* @param c2 The foreground colour.
|
|
* @param width The width of the triangle.
|
|
* @param height The height of the triangle.
|
|
*/
|
|
public function SierpinskiTriangle(n:uint, c1:uint, c2:uint, width:Number, height:Number):void {
|
|
_init(n, c1, c2, width, height);
|
|
}
|
|
|
|
/**
|
|
* Generates the triangle.
|
|
*
|
|
* @param n The order of the Sierpinski triangle.
|
|
* @param c1 The background colour.
|
|
* @param c2 The foreground colour.
|
|
* @param width The width of the triangle.
|
|
* @param height The height of the triangle.
|
|
* @private
|
|
*/
|
|
private function _init(n:uint, c1:uint, c2:uint, width:Number, height:Number):void {
|
|
|
|
if ( n <= 0 )
|
|
return;
|
|
|
|
// Draw the outer triangle.
|
|
|
|
graphics.beginFill(c1);
|
|
graphics.moveTo(width / 2, 0);
|
|
graphics.lineTo(0, height);
|
|
graphics.lineTo(width, height);
|
|
graphics.lineTo(width / 2, 0);
|
|
|
|
// Draw the inner triangle.
|
|
|
|
graphics.beginFill(c2);
|
|
graphics.moveTo(width / 4, height / 2);
|
|
graphics.lineTo(width * 3 / 4, height / 2);
|
|
graphics.lineTo(width / 2, height);
|
|
graphics.lineTo(width / 4, height / 2);
|
|
|
|
if ( n == 1 )
|
|
return;
|
|
|
|
// Recursively generate three Sierpinski triangles of half the size and order n - 1 and position them appropriately.
|
|
|
|
var sub1:SierpinskiTriangle = new SierpinskiTriangle(n - 1, c1, c2, width / 2, height / 2);
|
|
var sub2:SierpinskiTriangle = new SierpinskiTriangle(n - 1, c1, c2, width / 2, height / 2);
|
|
var sub3:SierpinskiTriangle = new SierpinskiTriangle(n - 1, c1, c2, width / 2, height / 2);
|
|
|
|
sub1.x = width / 4;
|
|
sub1.y = 0;
|
|
sub2.x = 0;
|
|
sub2.y = height / 2;
|
|
sub3.x = width / 2;
|
|
sub3.y = height / 2;
|
|
|
|
addChild(sub1);
|
|
addChild(sub2);
|
|
addChild(sub3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|