Skip to main content

OptimalColors

Struct OptimalColors 

Source
pub struct OptimalColors(/* private fields */);
Expand description

Represents the set of optimal colors in colorimetry.

Optimal colors define the theoretical limits of color saturation (chroma) for given lightness and hue values. They are based on binary reflectance spectra that reflect either 0% or 100% of light at each wavelength, representing the most vivid colors physically possible under the constraints of human vision.

These colors form the boundary of the CIE color spaces (such as CIE 1931 or CIELAB), and are used to compute:

  • The spectral locus in chromaticity diagrams.
  • The maximum chroma values at given lightness and hue levels in perceptual spaces like CIELAB.

Although optimal colors do not correspond to real-world pigments or displays, they are essential for defining the theoretical gamut of visible colors.

Implementations§

Source§

impl OptimalColors

Source

pub fn new(observer: Observer, ref_white: CieIlluminant) -> OptimalColors

Computes the optimal colors for the observer under the specified reference white.

The resulting OptimalColors contains a matrix of tristimulus values derived from optimal spectra.

§Arguments
  • ref_white - The reference white illuminant to use for the calculations.
§Returns
  • OptimalColors - A struct containing the reference white and the matrix of optimal colors.
§Notes
  • The optimal colors are computed by applying a rectangular filter to the spectral locus, simulating the addition of contiguous spectral bands with increasing width.
  • Each row in the resulting matrix corresponds to a different filter width, and the filter wraps around the spectrum to ensure continuity and to represent the full range of possible colors.
  • The number of spectral samples, NS, is fixed at 401 throughout the library.
    • The resulting matrix has shape (NS-1, NS) = (400, 401).
    • Each column corresponds to a starting wavelength, and each row to a filter width.
  • This is a theoretical construct and may not correspond to physically realizable colors.
  • As it calculates about 160,000 colors, it may be computationally intensive.
Source

pub fn white_point(&self) -> XYZ

Source

pub fn colors(&self) -> &DMatrix<Vector3<f64>>

Source

pub fn observer(&self) -> Observer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool