UNPKG

lifehash

Version:

TypeScript/JavaScript implementation of LifeHash, a visual hash algorithm

67 lines (66 loc) 2.26 kB
import { Grid } from './Grid.js'; import { PatternType } from './Pattern.js'; import { Point } from './Point.js'; import { Size } from './Size.js'; import { Transform } from './Transform.js'; export class ColorGrid extends Grid { constructor(frac_grid, gradient, pattern) { let transforms; super(ColorGrid.target_size(frac_grid.size, pattern)); if (Object.keys(ColorGrid.transforms_map).includes(pattern.toString())) { transforms = ColorGrid.transforms_map[pattern]; } else { transforms = []; } for (const point of frac_grid.get_points()) { const val = frac_grid.get_value(point); const some_color = gradient(val); this.draw(point, some_color, transforms); } } color_for_value(color) { return color; } static target_size(in_size, pattern) { const multiplier = pattern === PatternType.fiducial ? 1 : 2; return new Size(in_size.width * multiplier, in_size.height * multiplier); } transform_point(point, transform) { const result = new Point(point.x, point.y); if (transform.transpose) { [result.x, result.y] = [result.y, result.x]; } if (transform.reflect_x) { result.x = this._maxX - result.x; } if (transform.reflect_y) { result.y = this._maxY - result.y; } return result; } draw(point, color, transforms) { for (const transform of transforms) { const p2 = this.transform_point(point, transform); this.set_value(color, p2); } } } ColorGrid.snowflake_transforms = [ new Transform(false, false, false), new Transform(false, true, false), new Transform(false, false, true), new Transform(false, true, true), ]; ColorGrid.pinwheel_transforms = [ new Transform(false, false, false), new Transform(true, true, false), new Transform(true, false, true), new Transform(false, true, true), ]; ColorGrid.fiducial_transforms = [new Transform(false, false, false)]; ColorGrid.transforms_map = { 0: ColorGrid.snowflake_transforms, 1: ColorGrid.pinwheel_transforms, 2: ColorGrid.fiducial_transforms, };