42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
const linearTransform = (a, b, c, d, e, f) => point => [
|
|
a * point[0] + b * point[1] + e,
|
|
c * point[0] + d * point[1] + f
|
|
];
|
|
|
|
const polygonTransforms = (vertices, frac) => vertices.map(
|
|
vertex => linearTransform(
|
|
frac, 0, 0, frac,
|
|
vertex[0] * (frac - 1), vertex[1] * (frac - 1)
|
|
)
|
|
);
|
|
|
|
const regularVertices = count => {
|
|
var step = 2 * Math.PI / count;
|
|
var initial = -Math.atan(Math.sin(step) / (Math.cos(step) - 1));
|
|
var result = [];
|
|
|
|
for (var i = 0; i < count; i += 1) {
|
|
var current = step * i + initial;
|
|
|
|
result.push([Math.cos(current) * 10, Math.sin(current) * 10]);
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
export const barnsley = [[
|
|
linearTransform(0, 0, 0, 0.16, 0, 0),
|
|
linearTransform(.85, .04, -.04, .85, 0, 1.6),
|
|
linearTransform(.20, -.26, .23, .22, 0, 1.6),
|
|
linearTransform(-.15, .28, .26, .24, 0, .44)
|
|
], [
|
|
.01, .85, .07, .07
|
|
]];
|
|
|
|
export const sierpinski = [
|
|
polygonTransforms(regularVertices(3), 1 / 2),
|
|
[1 / 3, 1 / 3, 1 / 3]
|
|
];
|