Color gradient algorithm -
given 2 rgb colors , rectangle, i'm able create basic linear gradient. blog post gives explanation on how create it. want add 1 more variable algorithm, angle. want create linear gradient can specified angle of color.
for example, have rectangle (400x100). color red (255, 0, 0) , color green (0, 255, 0) , angle 0°, have following color gradient.

given have same rectangle, color , color. time change angle 45°. should have following color gradient.

that's quite simple. besides angle, need 1 more parameter, i.e. how tight/wide gradient should be. let's instead work 2 points:
__d __-- __-- __-- __-- m where m middle point of gradient (between red , green) , d shows direction , distance. therefore, gradient becomes:
m' | __d | __-- | __-- | __-- | __-- m __-- | __-- | __-- | __-- | d'-- | m" which means, along vector d'd, change red green, linearly know. along vector m'm", keep color constant.
that theory. implementation depends on how draw pixels. let's assume nothing , want decide color pixel pixel (so can draw in pixel order.)
that's simple! let's take point:
m' | sa __d __--| __-- p-- |__ __-- | -- /| \ __-- | -- | |_-- | --m |__-- | __--ca | __-- | __-- | d'-- | m" point p, has angle a coordinate system defined m , d. know along vector m'm", color doesn't change, sin(a) doesn't have significance. instead, cos(a) shows relatively how far towards d or d' pixels color should go to. point ca shows |pm|cos(a) means mapping of p on line defined m , d, or in details length of line pm multiplied cos(a).
so algorithm becomes follows
- for every pixel
- calculate
ca - if farther
d, green. if befored', red. - else find color red green based on ratio of
|d'ca|/|d'd|
- calculate
based on comments, if want determine wideness canvas size, can calculate d based on input angle , canvas size, although advise using separate parameter.
Comments
Post a Comment