Hello! We’ve noticed that you haven’t made any recent edits on your wiki this year. This is a notice that your wiki is eligible for removal. Click here to learn more about the criteria for wiki removal.
Fractal - умеет отрисовывать себя и создавать части из которых состоит фрактал
FractalView - умеет отрисовывать весь фрактал до некоторой заданной глубины
public abstract class Fractal {
public abstract function shape(): Node;
public abstract function childs(): Fractal[];
}
public class FractalView extends CustomNode {
public var fractal: Fractal;
public var depth: Integer;
override function create() {
create(depth, fractal);
}
function create(depth: Integer, fractal: Fractal): Node {
if (depth == 1) {
fractal.shape()
} else {
Group {
content: for (f in fractal.childs()) create(depth - 1, f)
}
}
}
}
Снежинка Коха[]
Вот как можно описать сторону снежинки Коха в виде фрактала:
class Side extends Fractal {
public var x1: Number;
public var y1: Number;
public var x2: Number;
public var y2: Number;
override public function childs(): Fractal[] {
var dx = x2 - x1;
var dy = y2 - y1;
var x3 = x1 + dx / 3;
var y3 = y1 + dy / 3;
def sqrt = Math.sqrt(3.0);
var x4 = x1 + dx / 2 - sqrt * dy / 6;
var y4 = y1 + dy / 2 + sqrt * dx / 6;
var x5 = x1 + 2 * dx / 3;
var y5 = y1 + 2 * dy / 3;
[
Side { x1: x1 y1: y1 x2: x3 y2: y3 }
Side { x1: x3 y1: y3 x2: x4 y2: y4 }
Side { x1: x4 y1: y4 x2: x5 y2: y5 }
Side { x1: x5 y1: y5 x2: x2 y2: y2 }
]
}
override public function shape(): Node {
Line {
startX: x1 startY: y1 endX: x2 endY: y2
stroke: Color.BLUE
}
}
}
Снежинка Коха состоит из 3х сторон:
class SnowFlake extends CustomNode {
public var centerX: Number;
public var centerY: Number;
public var radius: Number;
public var depth: Integer;
override function create() {
def angle = 2 * Math.PI / 3;
def PI2 = Math.PI / 2;
var x = for (i in [1..3]) centerX + radius * Math.cos(i * angle + PI2);
var y = for (i in [1..3]) centerY - radius * Math.sin(i * angle + PI2);
Group {
content: [
FractalView {
depth: depth
fractal: Side { x1: x[0] y1: y[0] x2: x[1] y2: y[1] }
}
FractalView {
depth: depth
fractal: Side { x1: x[1] y1: y[1] x2: x[2] y2: y[2] }
}
FractalView {
depth: depth
fractal: Side { x1: x[2] y1: y[2] x2: x[0] y2: y[0] }
}
]
}
}
}