2010-08-10 8 views
0

Je suis en train de me battre pour interpoler une couleur, avec start_time et end_time, start_color et end_color. Par souci de simplicité, voici un exemple de la façon dont je pense à le faire avec juste la composante rouge:Interpolation de la couleur RVB

start_time = 0 
end_time = 1 
start_color = F //base 16 ftw 
end_color = 0 

Je peux voir comment au moment 0,5, red_out devrait être 8. Ce serait à mi-chemin de la décoloration rouge vif à noir.

Alors, est-ce time_elapsed * start_color? Mais alors, que se passe-t-il si l'on passe du noir au rouge vif? C'est là que je suis confus.

+0

Bonnes choses, ty tout. Var redoutout = time_alive * (pArray [i] .pEndColorRed - pArray [i] .pStartColorRed)/(maintenant - pArray [i] .pStarttime) .toString (16); – jason

+0

ugh ce qui est officiellement la ligne la plus laide d'un code Ive everwrote lol

var = RED_OUT (Math.abs (parseInt ((time_alive * (parray [i] .pEndColorRed - parray [i] .pStartColorRed)/(pArray [i] .pLifespan))))). toString (16); – jason

+0

@lincolnk: nouveau ici fera l'affaire – jason

Répondre

1

pour chaque composante de couleur, vous devez utiliser la formule suivante (rien magique):

color = time_elapsed * (end_color - start_color)/(end_time - star_time) 
1

L'autre façon semble assez simple, si vous pensez que au moment t (où gammes t de 0 à 1) , la valeur du canal est:

start + t * (end - start) 

de cette façon, si la valeur finale est inférieure à la valeur de départ (comme dans le rouge -> boîtier noir), la clause end - start est négative, de sorte que le temps augmente la valeur diminue selon les besoins.

Il est également de constater que dans les cas limites,

t = 0 => start + 0 = start 
t = 1 => start + (end - start) = end 

selon les besoins. Edit: La bonne chose à propos de cette représentation est qu'elle permet également de savoir comment modifier le taux de désintégration. Tant que la valeur pour t commence à 0 et atteint finalement 1, elle ne doit pas nécessairement être modifiée linéairement. Par exemple, si vous voulez que l'interpolation commence lentement et accélère vers la fin, vous pouvez utiliser t à la place.

1
interpolated_color_component = (current_time - start_time)/(end_time - start_time) * (end_color_component - start_color_component) + start_color_component