Это можно сделать без хороших математических навыков, поскольку вам нужно только выполнить сложный расчет в самом начале, а затем просто использовать средние точки (в моем примере: p12 => средняя точка между p1 и p2 и т. Д.).) сторон треугольника.Это рекурсивная функция, которая вызывает себя три раза за ход, пока не будет достигнут максимальный уровень.Я включил мой пример ниже.Будьте осторожны со значением max, потому что оно может на короткое время заморозить ваш компьютер, если установить слишком высокое ...
Это был действительно забавный вопрос!
public class Fract extends Sprite
{
private var w : Number = stage.stageWidth;
private var h : Number = stage.stageHeight;
private var max : uint = 6;
public function Fract ()
{
init( );
}
private function init () : void
{
var p1 : Point = new Point( (w / 4), (h - h / 4) );
var p2 : Point = new Point( (w - w / 4), p1.y );
var dist : Number = (p2.x - p1.x);
var dist2 : Number = dist * .5;
var p3 : Point = new Point( p1.x + dist2, p1.y - Math.sqrt( (dist * dist) - (dist2 * dist2) ) );
drawTriangles( p1, p2, p3, 0, max );
}
private function drawTriangles (p1 : Point, p2 : Point, p3 : Point, level : uint, max : uint) : void
{
var spr : Sprite = new Sprite( );
addChild( spr );
var g : Graphics = spr.graphics;
g.lineStyle( 1, 0, 1 );
g.moveTo( p1.x, p1.y );
g.lineTo( p2.x, p2.y );
g.lineTo( p3.x, p3.y );
g.lineTo( p1.x, p1.y );
if (level < max)
{
var p12 : Point = new Point( p1.x + (p2.x - p1.x) * .5, p1.y + (p2.y - p1.y) * .5 );
var p23 : Point = new Point( p2.x + (p3.x - p2.x) * .5, p2.y + (p3.y - p2.y) * .5 );
var p31 : Point = new Point( p3.x + (p1.x - p3.x) * .5, p3.y + (p1.y - p3.y) * .5 );
drawTriangles( p1, p12, p31, level + 1, max);
drawTriangles( p12, p2, p23, level + 1, max);
drawTriangles( p31, p23, p3, level + 1, max);
}
}
}