Maison > développement back-end > Golang > Comment pouvons-nous trouver algorithmiquement la couleur intermédiaire entre deux couleurs de peinture données ?

Comment pouvons-nous trouver algorithmiquement la couleur intermédiaire entre deux couleurs de peinture données ?

Mary-Kate Olsen
Libérer: 2024-12-01 16:08:13
original
167 Les gens l'ont consulté

How Can We Algorithmically Find the Intermediate Color Between Two Given Paint Colors?

Algorithme pour trouver la couleur entre deux autres dans un espace colorimétrique peint

Lors de l'utilisation de peinture, le mélange de différentes teintes crée des variations qui diffèrent du numérique domaine des modèles de couleurs RVB. Dans le monde des peintures physiques, les couleurs sont absorbées ou réfléchies plutôt qu'émises, conduisant à des résultats de mélange uniques.

Concept d'absorption

L'absorption de la peinture joue un rôle crucial dans le processus de mélange. La peinture « bleue », par exemple, absorbe les longueurs d’onde rouges et vertes, ce qui ne reflète que la lumière bleue. De même, la peinture jaune absorbe les longueurs d'onde bleues, réfléchissant uniquement la lumière jaune.

Les défis du mélange de couleurs de peinture

En théorie, la combinaison de peintures jaunes et bleues devrait produire du noir ou du gris boueux. . Cependant, des limitations pratiques, telles que les impuretés présentes dans la peinture, entraînent souvent une teinte vert boueux. Créer une couleur verte satisfaisante en mélangeant le bleu et le jaune est un défi courant en peinture.

Interpolation des couleurs dans l'espace colorimétrique HLS

Bien que l'émulation physique du mélange de peinture puisse ne pas être réalisable, il est possible d'interpoler les couleurs pour obtenir les teintes souhaitées en utilisant l'espace colorimétrique HSL (Teinte, Saturation, Luminosité). HSL représente les couleurs en termes de propriétés innées, ce qui facilite leur manipulation et leur mélange.

Implémentation Python

Le code Python suivant illustre la moyenne des couleurs dans l'espace colorimétrique HLS :

from colorsys import rgb_to_hls, hls_to_rgb
from math import sin, cos, atan2, pi

def average_colors(rgb1, rgb2):
    # Convert RGB values to HLS
    h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.)
    h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.)

    # Calculate average saturation and lightness
    s = 0.5 * (s1 + s2)
    l = 0.5 * (l1 + l2)

    # Calculate average hue (considering hue wrapping)
    x = cos(2*pi*h1) + cos(2*pi*h2)
    y = sin(2*pi*h1) + sin(2*pi*h2)
    if x != 0.0 or y != 0.0:
        h = atan2(y, x) / (2*pi)
    else:
        h = 0.0
        s = 0.0

    # Convert HLS back to RGB
    r, g, b = hls_to_rgb(h, l, s)
    return (int(r*255.), int(g*255.), int(b*255.))
Copier après la connexion

Exemple Utilisation

>>> average_colors((255,255,0),(0,0,255))
(0, 255, 111)
>>> average_colors((255,255,0),(0,255,255))
(0, 255, 0)
Copier après la connexion

Remarque : Cette implémentation ne reproduit pas le processus de mélange de peinture mais fournit une interpolation de couleurs agréable à percevoir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal