speice.io/posts/2023/06/flam3/2c-final.ts

73 lines
1.3 KiB
TypeScript

import {
Coefs,
Flame,
Transform,
linear,
julia,
popcorn,
pdj,
transform1Coefs,
transform1Weight,
transform2Coefs,
transform2Weight,
transform3Coefs,
transform3Pdj,
transform3Weight,
render,
} from "./2a-variations";
import { TransformPost, transform2Post } from "./2b-post";
export class FlameFinal extends Flame {
constructor(
transforms: [number, Transform][],
public readonly final: Transform
) {
super(transforms);
}
step() {
super.step();
[this.x, this.y] = this.final.apply(this.x, this.y);
}
}
export const finalCoefs: Coefs = {
a: 2,
b: 0,
c: 0,
d: 0,
e: 2,
f: 0,
};
export function renderFinal(image: ImageData) {
const transform1 = new Transform(transform1Coefs, [[1, julia]]);
const transform2 = new TransformPost(
transform2Coefs,
[
[1, linear],
[1, popcorn],
],
transform2Post
);
const [pdjA, pdjB, pdjC, pdjD] = transform3Pdj;
const transform3 = new Transform(transform3Coefs, [
[1, pdj(pdjA, pdjB, pdjC, pdjD)],
]);
const transformFinal = new Transform(finalCoefs, [[1, julia]]);
const flame = new FlameFinal(
[
[transform1Weight, transform1],
[transform2Weight, transform2],
[transform3Weight, transform3],
],
transformFinal
);
render(flame, 1, image);
}