Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 5x 5x 5x 11221x 11221x 11221x | import { roundToPrecisionSmall } from "./math-utilities";
/**
* {@link https://en.wikipedia.org/wiki/CIE_1931_color_space | XYZ color space}
*
* This implementation uses the D65 constants for 2 degrees. That determines the constants used for the pure white point of the XYZ space of 0.95047, 1.0, 1.08883.
* {@link https://en.wikipedia.org/wiki/Illuminant_D65}
* These constants determine how the XYZ, LCH and LAB colors convert to/from RGB.
*
* @public
*/
export class ColorXYZ {
/**
* D65 2 degree white point
*/
public static readonly whitePoint: ColorXYZ = new ColorXYZ(0.95047, 1.0, 1.08883);
/**
* Construct a {@link ColorXYZ} from a config object.
*/
public static fromObject(data: { x: number; y: number; z: number }): ColorXYZ | null {
if (data && !isNaN(data.x) && !isNaN(data.y) && !isNaN(data.z)) {
return new ColorXYZ(data.x, data.y, data.z);
}
return null;
}
constructor(x: number, y: number, z: number) {
this.x = x;
this.y = y;
this.z = z;
}
public readonly x: number;
public readonly y: number;
public readonly z: number;
/**
* Determines if a color is equal to another
* @param rhs - the value to compare
*/
public equalValue(rhs: ColorXYZ): boolean {
return this.x === rhs.x && this.y === rhs.y && this.z === rhs.z;
}
/**
* Returns a new {@link ColorXYZ} rounded to the provided precision
* @param precision - the precision to round to
*/
public roundToPrecision(precision: number): ColorXYZ {
return new ColorXYZ(
roundToPrecisionSmall(this.x, precision),
roundToPrecisionSmall(this.y, precision),
roundToPrecisionSmall(this.z, precision)
);
}
/**
* Returns the {@link ColorXYZ} formatted as an object.
*/
public toObject(): { x: number; y: number; z: number } {
return { x: this.x, y: this.y, z: this.z };
}
}
|